Hi, ChengYu!

You got to put the past behind you before you can move on.

  • 海上月是天上月,眼前人是心上人。

    08 2024 档案

    摘要:哈希算法 前面介绍了哈希表的工作原理和哈希冲突的处理方法。然而无论是开放寻址还是链式地址,它们只能保证可以在发生冲突时正常工作,而无法减少哈希冲突的发生。 如果哈希冲突过于频繁,哈希表的性能则会急剧劣化。如下图所示,对于链式哈希表,理想情况下键值对均匀分布在各个桶中,达到最佳查询效率;最差情况所有键 阅读全文
    posted @ 2024-08-28 17:29 风陵南 阅读(143) 评论(0) 推荐(0) 编辑
    摘要:哈希冲突 通常情况下哈希函数那点输入空间远大于输出空间,因此理论上哈希冲突是不可避免的。比如输入空间为全体整数,输出空间为数组容量大小,则必然有多个整数映射至同一个桶索引。 哈希冲突会导致查询结果错误,严重影响哈希表的可用性。为了解决该问题,每当遇到哈希冲突时,我们就进行哈希表扩容,直至冲突消失。此 阅读全文
    posted @ 2024-08-28 15:29 风陵南 阅读(66) 评论(0) 推荐(0) 编辑
    摘要:哈希表 哈希表(hash table),又称散列表,它通过建立键key与值value之间的映射,实现高效的元素查询。具体而言,我们向哈希表中输入一个键key,则可以在O(1)时间内获取对应的值value。 除哈希表外,数组和链表也可以实现查询功能,他们的效率对比如下表: 添加元素:仅需将元素添加至数 阅读全文
    posted @ 2024-08-27 15:21 风陵南 阅读(76) 评论(0) 推荐(0) 编辑
    摘要:队列 队列(queue)是一种遵循先入先出规则的线性数据结构。队列模拟了排队现象,即新来的人不断加入队列尾部,而队列头部的人逐个离开。 如图所示,我们将队列头部称为“队首”,尾部称为“队尾”,将把元素加入队列尾部的操作称为“入队”,删除队首元素的操作称为“出队”。 队列常用操作 方法名 描述 时间复 阅读全文
    posted @ 2024-08-27 10:16 风陵南 阅读(70) 评论(0) 推荐(0) 编辑
    摘要:栈 栈(stack)是一种遵循先入后出逻辑的线性数据结构。 如图所示,我们将堆叠元素的顶部称为“栈顶”,底部称为“栈底”。将吧元素添加到栈顶的操作叫做“入栈”,删除栈顶的操作叫做“出栈”。 栈的常用操作 方法 描述 时间复杂度 push() 元素入栈(添加至栈顶) O(1) pop() 栈顶元素出栈 阅读全文
    posted @ 2024-08-26 15:24 风陵南 阅读(65) 评论(0) 推荐(0) 编辑
    摘要:内存与缓存 数组和链表两种数据结构分别代表了“连续存储”和“分散存储”两种物理结构。实际上,物理结构在很大程度上决定了程序对内存和缓存的使用效率,进而影响算法程序的整体性能。 计算机存储设备 计算机中包括三种类型的存储设备:硬盘(hard disk)、内存(random-access memory, 阅读全文
    posted @ 2024-08-26 10:41 风陵南 阅读(46) 评论(0) 推荐(0) 编辑
    摘要:链表 内存空间是所有程序的公共资源,在一个复杂的系统运行环境下,空闲的内存空间可能散落在内存各处。存储数组的空间必须是连续的,而当数组非常大时,内存可能无法提供如此大的连续空间,此时链表的灵活性优势就体现出来了。 链表是一种线性数据结构,其中的每个元素都是一个节点对象,各个节点通过“引用”相连接。引 阅读全文
    posted @ 2024-08-23 14:42 风陵南 阅读(26) 评论(0) 推荐(0) 编辑
    摘要:基本数据类型 基本数据类型是计算机CPU可以直接进行运算的类型,在算法中直接被使用,主要包括以下几种 整数类型byte、short、int、long。 浮点数类型float、double,用于表示小数 字符类型char,用于表示各种语言的字母、标点符号甚至表情符号等。 布尔类型bool,用于表示“是 阅读全文
    posted @ 2024-08-23 10:17 风陵南 阅读(151) 评论(0) 推荐(0) 编辑
    摘要:数据结构的分类 常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图,它们可以从“逻辑结构”和“物理结构”两个维度进行分类 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线性关系;而在数中,数据从顶部向下按层次排列,表现出“ 阅读全文
    posted @ 2024-08-22 16:25 风陵南 阅读(90) 评论(0) 推荐(0) 编辑
    摘要:空间复杂度 空间复杂度(space complexity)用于衡量算法占用内存空间随着数据量变大时的增长趋势。这个概念与时间复杂度非常类似,只需将“运行时间”替换为“占用内存空间”。 算法相关空间 算法在运行过程中使用的内存空间主要包括以下几种。 输入空间:用于存储算法的输入数据。 暂存空间:用于存 阅读全文
    posted @ 2024-08-19 17:28 风陵南 阅读(38) 评论(0) 推荐(0) 编辑
    摘要:时间复杂度 运行时间可以直观且准确地反映算法的效率。要准确预估一段代码的运行时间,应该进行如下操作。 确定运行平台,包括硬件配置、编程语言、系统环境等,这些因素都会影响代码的运行效率。 评估各种计算操作的运行时间,例如加法操作需要1ns,乘法操作需要10ns,打印操作需要5ns等。 统计代码中所有的 阅读全文
    posted @ 2024-08-19 16:03 风陵南 阅读(51) 评论(0) 推荐(0) 编辑
    摘要:复杂度分析 算法效率评估 在算法设计中,我们追求以下两个层面的目标。 找到问题解法:算法需要再规定的输入范围内可靠地求得问题的正确解 寻求最优解法:同一个问题可能存在多种解法,我们希望找到尽可能高效的算法。 也就是说,在能够解决问题的前提下,算法效率已经成为衡量算法优劣的主要评价指标,它包括以下两个 阅读全文
    posted @ 2024-08-19 15:55 风陵南 阅读(59) 评论(0) 推荐(0) 编辑
    摘要:string类型操作 字符串切割 str.substr(索引,切割的个数) -> 返回字符串 注意:第二个参数为切割的个数 string buf = "abcdefg"; buf.substr(0, 2); // 结果为 "ab" buf.substr(1, 3); // 结果为 "bcd" 按字符 阅读全文
    posted @ 2024-08-16 10:25 风陵南 阅读(167) 评论(0) 推荐(0) 编辑
    摘要:char*类型与vector<char> 类型的相互转换 很多时候需要使用动态的字符串,但是char*难以完成相应的扩容操作,而动态数组vector则可以简单地完成,结合二者特性就可以完成动态字符串,同时,也需要二者类型的相互转换: char* 转vector<char> vector<char> 阅读全文
    posted @ 2024-08-08 14:37 风陵南 阅读(451) 评论(0) 推荐(0) 编辑
    摘要:算法初识 算法定义: 算法(algorithm)是在有限时间内解决特定问题的一组指令或操作步骤,它具有以下特性。 问题是明确的,包含清晰的输入和输出定义。 具有可行性,能够在有限步骤、时间和内存空间完成。 各步骤都有确定的定义,在相同的输入和运行条件下,输出始终相同。 数据结构定义: 数据结构(da 阅读全文
    posted @ 2024-08-08 11:34 风陵南 阅读(11) 评论(0) 推荐(0) 编辑

    点击右上角即可分享
    微信分享提示