技术面试宝典: 很全面的算法和数据结构知识(含代码实现) - 文章
  • 时间:2018-11-30
  • 点击率:

列于表上

  • 在线典礼
  • 在线训练面试
  • 数据结构
  • 算法
  • 狼贪虎视算法
  • 位运算
  • 错综复杂的状态剖析
  • 浮华的
  • 面试宝典
  • 计算机科学新闻
  • 证件结构

在线典礼

在线训练面试

数据结构

链表

  • 链表是由杂种(杂种)结合的一次的数据集。,每个杂种经过用手指触摸辨向紧邻的杂种。。它是由杂种结合的。,并能用于表现序列的数据结构。
  • 文件服务器列表命令:每个杂种只辨向紧邻的杂种。,鞋楦的杂种点为空。
  • 双链表:每个杂种有两个用手指触摸P,n。P辨向前任一杂种,N点到紧邻的杂种;鞋楦的杂种点为空。
  • 迂回地链表:每个杂种辨向紧邻的杂种。,一号杂种的鞋楦杂种。
  • 工夫错综复杂的状态:
    • 参考:O(n)
    • 查找:O(n)
    • 拔出:O(1)
    • 剔除:O(1)

  • 堆栈是元素的集合。,伴奏两个根本采取军事行动:推用来将元素推到堆栈中。,POP用于剔除堆栈顶部元素。
  • 怯生生的先出的数据结构(Last In First Out, 怯生生的先出法
  • 工夫错综复杂的状态
    • 参考:O(n)
    • 查找:O(n)
    • 拔出:O(1)
    • 剔除:O(1)

队列

  • 队列是元素的集合。,伴奏两个根本采取军事行动:enqueue 用于向队列中添加元素,dequeue 用于剔除队列击中要害元素。
  • 上进先出的数据结构(First In First Out, 上进先出法)。
  • 工夫错综复杂的状态
    • 参考:O(n)
    • 查找:O(n)
    • 拔出:O(1)
    • 剔除:O(1)

二叉树

  • 二叉树是任一树形数据结构,每个杂种至多可以有两身材杂种。,它们高等的左和右子杂种。。
  • 全横渡树 树:二叉树击中要害每个杂种都有 0 或许 2 身材杂种。
  • 无瑕的二叉树(Perfect 二元系的):二叉树击中要害每个杂种都有两身材杂种,而且迷住树叶杂种的吃水是恒等的的。。
  • 完整二叉树:而且二叉树击中要害鞋楦任一越过,迷住层击中要害杂种数量,鞋楦给人铺床击中要害杂种继续集合在最在左边的S上。。

二叉查找树

  • 二叉搜索树(BST)是一种二叉树。。什么都可以杂种的值大于或总共左子的值。,以内或总共右子树击中要害值。
  • 工夫错综复杂的状态
    • 参考:O(log(n))
    • 查找:O(log(n))
    • 拔出:O(log(n))
    • 剔除:O(log(n))

字典树

  • 字典树,也称为基数树或前缀树。,一种用于仓库静态集合或相干衣服电键的查找树。树击中要害杂种无力的最接近的仓库相干的电键详细说明。,树中杂种的外景决议了互相牵连的KE。。杂种的迷住子杂种都具有恒等的的前缀。,根杂种是空字母行。。

树状衣服

  • 树状衣服,也称为二叉参考树 Indexed Tree,位),它是一棵向某人点头或摇头示意树。,只经过衣服意识到的。。衣服击中要害下标表现树击中要害杂种。,每个杂种的父杂种或子杂种的下标可以经过位运算装置来开腰槽。。衣服击中要害每个元素包罗预测区间值的和。,在树木翻新的完整的过程中,这些计算的值也将被翻新。。
  • 工夫错综复杂的状态
    • 区间乞和:O(log(n))
    • 翻新:O(log(n))

分段树

  • 分段树是用于仓库区间和分段的树形数据结构。它容许您找到任一杂种出如今多行SEG击中要害次数。。
  • 工夫错综复杂的状态
    • 区间搜索:O(log(n))
    • 翻新:O(log(n))

  • 堆是一种因为树的安抚稍微特点的数据结构:完整的堆中迷住父杂种和子杂种的关键详细说明安抚S。堆分为最大堆和最小堆。。最大桩,父杂种的键详细说明始终大于或总共电键。,根杂种的最大量的是最大的。。最小堆中,父杂种的键详细说明始终以内或总共电键VAL。,根杂种的键详细说明是最小的。。
  • 工夫错综复杂的状态
    • 参考:O(log(n))
    • 查找:O(log(n))
    • 拔出:O(log(n))
    • 剔除:O(log(n))
    • 剔除最大量的/最小量:O(1)

哈希

  • 哈希用于将任性按大小排列的数据熭到定期地按大小排列的数据。。哈希重大聚会的恢复值称为搞糟。、哈希加密或哈希。万一两样的大调开腰槽恒等的的搞糟,那么发作了冲。。
  • Hash Maphash map 是任一仓库键详细说明间相干的数据结构。HashMap 经过哈希重大聚会将键转变为桶或许槽击中要害下标,因而宽裕的找到详细说明的值。。
  • 冲处置
    • 链地址法(Separate Chaining:链式地址法,每个桶彼此的孤独。,每个参考对应于元素列表。。处置HashMap 工夫是寻觅桶(常数)的工夫和TR的工夫积和。。
    • 吐艳地址法(Open Addressing:吐艳地址法,当拔出新值时,它决定对应关于此点值的哈希桶条件在。,万一在,则土地算法击中要害紧邻的外景选择紧邻的能够的外景。,直到找到未被占用的地址。任一吐艳的地址,即任一元素的外景,哪儿的话始终决定的。。

  • 相片是G. =(V,E序对,它包罗一组顶峰或杂种。 V 和边沿或弧的集合E,流行E包罗来自某处V的两个元素(即,边与两个VE互相牵连系)。 ,而且相干是两个顶峰的使混乱对。。
  • 无向图:图的邻接矩阵是整齐的。,因而万一有杂种 u 到杂种 v 的边,那杂种 v 到杂种 u 边沿也霉臭在。。
  • 有向图:图的邻接矩阵缺陷整齐的。。因而万一有杂种 u 到杂种 v 边沿哪儿的话具有重要性霉臭有杂种。 v 到杂种 u 的边。

算法

排序

急速的排序

  • 不乱:否
  • 工夫错综复杂的状态
    • 最优:O(nlog(n))
    • 最差:O(n^2)
    • 分摊:O(nlog(n))

合排序

  • 归拢排序是一种得胜算法。该算法将衣服延续划分为两比例。,拆移对摆布子衣服停止排序,那么将这两个衣服分解任一新的次序衣服。。
  • 不乱:是
  • 工夫错综复杂的状态:
    • 最优:O(nlog(n))
    • 最差:O(nlog(n))
    • 分摊:O(nlog(n))

桶排序

  • 桶排序是将元素划分为某个n的排序算法。。每个桶经过安宁算法停止排序。,或复回使调动桶排序。
  • 工夫错综复杂的状态
    • 最优:Ω(n + k)
    • 最差: O(n^2)
    • 分摊:Θ(n + k)

基数分级

  • 基数分级相似地桶排序。,将元素分派到一定数量的桶。两样之处取决于,基数分级不容许每个桶在SP过后独立分级。,相反,合采取军事行动是最接近的使完满的。。
  • 工夫错综复杂的状态
    • 最优:Ω(nk)
    • 最差: O(NK)
    • 分摊:(NK)

图算法

吃水基础的搜索

  • 吃水基础的搜索是遍历子杂种F的图遍历算法。。
  • 工夫错综复杂的状态:O(|V| + |E|)

延伸基础的搜索

  • 延伸基础的搜索是一种遍历邻近的图遍历算法。。
  • 工夫错综复杂的状态:O(|V| + |E|)

拓扑排序

  • 拓扑排序是有向图杂种的一次的排序。助动词=have什么都可以杂种 u 到杂种 v 的边,u 下标先行 v。
  • 工夫错综复杂的状态:O(|V| + |E|)

Dijkstra算法

  • Dijkstra 该算法是寻觅任一单一的酸的最短道路的算法。。
  • 工夫错综复杂的状态:O(|V|^2)

Bellman-Ford算法

  • Bellman-Ford 一种从单点到另一点的最短道路求取算法。
  • 不过工夫错综复杂的状态大于 Dijkstra 算法,然而它可以处置带有负边的图。。
  • 工夫错综复杂的状态:

Floyd-Warshall 算法

  • Floyd-Warshall 该算法是一种寻觅任性杂种间最短道路的算法。。
  • 迷住杂种经过的最短道路(道路重要和)可以经过家具器找到。。
  • 工夫错综复杂的状态:
    • 最优:O(|V|^3)
    • 最差:O(|V|^3)
    • 分摊:O(|V|^3)

最小增大树算法

  • 最小增大树算法是一种求解最小SP成绩的狼贪虎视算法。就是说,最小增大树算法可以找到边沿衔接的最小子类。
  • 工夫错综复杂的状态:O(|V|^2)

Kruskal 算法

  • Kruskal 该算法也一种计算最小辣椒苦的狼贪虎视算法。,但在 Kruskal 算法中,图无常的是衔接的。
  • 工夫错综复杂的状态:O(|E|log|V|)

狼贪虎视算法

  • 贪得无厌的算法始终眼前最好的选择。,并相信终极总效果也最优的。。
  • 贪得无厌的算法所能处置的成绩霉臭列举如下:
    • 最优子结构
    • 狼贪虎视选择
  • 金币选择
  • 然而金币的期望财富 V 分,也 n 种金币,更确切地说,典型是 i 协同金币 coinValue[i] 分,我的变化是 [0…n – 1]。如果每个典型都有有限的金币。,处置方法是创造和创造 V 你必要几金币作为最低的分?
  • 金币:一便士(1一分钱的硬币),镍(5一分钱的硬币),一角(10一分钱的硬币),使驻扎(25一分钱的硬币)。
  • 如果乞和 V 为41,。人们可以运用狼贪虎视算法来查找以内或总共 V 最大宗派的金币,那么从 V 减去金币的花费,反复地反复。
    • V = 41 | 运用了0枚金币。
    • V = 16 | 运用金币(41)。 – 25 = 16)
    • V = 6 | 运用两枚金币(16) – 10 = 6)
    • V = 1 | 运用三枚金币(6枚)。 – 5 = 1)
    • V = 0 | 运用四枚金币(1) – 1 = 0)

运算

  • 位采取军事行动:在位级采取军事行动的技术。运用位计算技术可以使遭受更快的采取军事行动排挡和SM。。
  • 试验第 k 位:s & (1 << k);
  • 设置K位。:s |= (1 << k);
  • 亲近的No. K.:s &= ~(1 << k);
  • 切换到外景K。:s ^= (1 << k);
  • 乘以2n:s << n;
  • 除号2N:s >> n;
  • 交集:s & t;
  • 并集:s | t;
  • 减法:s & ~t;
  • 最小非0位转移:s & (-s);
  • 转移反正0位:~s & (s + 1);
  • 交流值:x ^= y; y ^= x; x ^= y;

大 O 表现

  • 大 O 表现用于表现算法的上极限。,用来描写最坏的形势。

小 O 表现

  • 小 O 表现用于表现算法的渐近上极限。,两人越来越近了。。

大 Ω 表现

小 ω 表现

  • 小 ω 表现用于表现算法的渐近降谪人间。,两人越来越近了。。

Theta Θ 表现

  • Theta Θ 表现用于表现算法的尚待开发的领域。,包罗最小最大值和最大降谪人间。

以为完毕了吗?, 这不仅仅是理论地的知。,也加密意识到。。

这事实上是来自某处 GitHub 的任一 repo:

而且是你这么说的嘛!算法和知的数据衔接,也一些打扮算法典礼网站。、浮华的、面试宝典、Google、Facebook 著名公司面试成绩及答案加密。下载示例加密或搜集典礼网站。

Enjoy!


Powered by hg0088注册 Interactive