译者 | 开发人员 小吴
编者按:那时撷取三个开放源码项目,里头汇整了开发人员控制技术复试时须要介绍的演算法和计算机程序科学知识,因此还提供更多了适当的标识符,现阶段 GitHub 下标星 35000 star,有戏。
你能把那个工程项目的文本当做是三个产品目录, 在复试前加速下载两遍对你的复试也是略有协助的!
GitHub 门牌号:
https://github.com/kdn251/interviews
一、计算机程序
栈
栈是原素的子集,其包涵了三个基本操作:push 操作方式能用作将原素填充栈,pop 操作方式能将args原素去除。
遵从后授先出(LIFO)准则。
天数维数:
索引: O(n)
搜索: O(n)
插入: O(1)
去除: O(1)
链表
链表即是由节点组成的线性子集,每个节点能利用指针指向其他节点。 它是一种包涵了多个节点的、能够用作表示序列的计算机程序。
单向链表: 链 表中的节点仅指向下三个节点,因此最后三个节点指向空。
双向链表: 其中 每个节点具有三个指针 p、n,使得 p 指向先前节点因此 n 指向下三个节点,最后三个节点的 n 指针指向 null。
循环链表: 每 个节点指向下三个节点因此最后三个节点指向第三个节点的链表。
天数维数:
索引: O(n)
搜索: O(n)
插入: O(1)
去除: O(1)
队列
队列是原素的子集,其包涵了三个INS13ZD:enqueue 操作方式能用作将原素插入到队列中,而 dequeue 操作方式则是将原素从队列中去除。
遵从先入先出准则 (FIFO)。
天数维数:
索引: O(n)
搜索: O(n)
插入: O(1)
去除: O(1)
二叉查找树
二叉搜索树(BST)是一种特殊的二叉树,其任何节点中的值都会大于或者等于其左子树中存储的值因此小于或者等于其右子树中存储的值。
天数维数:
索引: O(log(n))
搜索: O(log(n))
插入: O(log(n))
删除: O(log(n))
字典树
字典树,又称基数树或者前缀树,能够用作存储键为字符串的动态子集或者关联数组的搜索树。树中的节点并没有直接存储关联键值,而是该节点在树中的挂载位置决定了其关联键值。某个节点的所有子节点都拥有相同的前缀,整棵树的根节点则是空字符串。
线段树
线段树是用作存放间隔或者线段的树形计算机程序,它允许加速的查找某三个节点在若干条线段中出现的次数.
天数维数:
区间查询: O(log(n))
更新: O(log(n))
哈希
哈希能够将任意长度的数据映射到固定长度的数据。哈希函数返回的即是哈希值,如果三个不同的键得到相同的哈希值,即将这种现象称为碰撞。
Hash Map: Hash M ap 是一种能够建立起键与值之间关系的计算机程序,Hash Map 能够使用哈希函数将键转化为桶或者槽中的下标,从而优化对于目标值的搜索速度。
碰撞解决
链门牌号法(Separate Chaining): 链门牌号法中,每个桶是相互独立的,包涵了一系列索引的列表。 搜索操作方式的天数 复杂度即是搜索桶的天数(固定天数)与遍历列表的天数之和。
开门牌号法(Open Addressing): 在开地 址法中,当插入新值时,会判断该值对应的哈希桶是否存在,如果存在则根据某种演算法依次选择下三个可能的位置,直到找到三个尚未被占用的门牌号。 所谓开门牌号法也是指某个原素的位置并不永远由其哈希值决定。
图
图是一种数据原素间为多对多关系的计算机程序,加上一组INS13ZD构成的抽象数据类型。
无向图(Undirected Graph): 无向图具有对称的邻接矩阵,因此如果存在某条从节点 u 到节点 v 的边,反之从 v 到 u 的边也存在。
有向图(Directed Graph): 有向 图的邻接矩阵是非对称的,即如果存在从 u 到 v 的边并不意味着一定存在从 v 到 u 的边。
堆
堆是一种特殊的基于树的满足某些特性的计算机程序,整个堆中的所有父子节点的键值都会满足相同的排序条件。堆更准确地能分为最大堆与最小堆,在最大堆中,父节点的键值永远大于或者等于子节点的值,因此整个堆中的最大值存储于根节点;而最小堆中,父节点的键值永远小于或者等于其子节点的键值,因此整个堆中的最小值存储于根节点。
天数维数:
访问最 大值 / 最小值: O(1)
插入: O(log(n))
去除最大值 / 最小值: O(log(n))
演算法
排序
归并排序
归并排序是典型的分治演算法,它不断地将某个数组分为三个部分,分别对左子数组与右子数组进行排序,然后将三个数组合并为新的有序数组。
稳定: 是
天数维数:
最优时 间: O(nlog(n))
最坏天数: O(nlog(n))
平均天数: O(nlog(n))
加速排序
稳定: 否
天数维数:
最优天数 : O(nlog(n))
最坏天数: O(n^2)
平均天数: O(nlog(n))
图演算法
深度优先搜索
深度优先演算法是一种优先遍历子节点而不是回溯的演算法。
天数复杂 度: O(|V| + |E|)
广度优先搜索
广度优先搜索是优先遍历邻居节点而不是子节点的图遍历演算法。
天数复杂 度: O(|V| + |E|)
拓扑排序
拓扑排序是对于有向图节点的线性排序,如果存在某条从 u 到 v 的边,则认为 u 的下标先于 v。
天数复 杂度: O(|V| + |E|)
END
那个开放源码工程项目里头还推荐了一些演算法练习网站、视频教程、复试宝典、Google、Facebook 等知名公司复试题及解答标识符。
最后再补充一下那个开放源码工程项目的 GitHub 门牌号:
https://github.com/kdn251/interviews
(*本文为 AI科技大本营转载文章,转载请联系原译者)
◆