「程序猿」最全Python入门算法来了,GitHub超6.8万星( 二 )


希尔排序
希尔排序 , 也称递减增量排序算法 , 是插入排序的一种更高效的改进版本 。 希尔排序是非稳定排序算法 。 希尔排序是基于插入排序的以下两点性质而提出改进方法的:
插入排序在对几乎已经排好序的数据操作时 , 效率高 , 即可以达到线性排序的效率
但插入排序一般来说是低效的 , 因为插入排序每次只能将数据移动一位
拓扑排序
在计算机科学领域 , 有向图的拓扑排序是其顶点的线性排序 , 使得对于从顶点u到顶点v的每个有向边uv , u在排序中都在v之前 。 例如 , 图形的顶点可以表示要执行的任务 , 并且边可以表示一个任务必须在另一个任务之前执行的约束;在这个应用中 , 拓扑排序只是一个有效的任务顺序 。 如果且仅当图形没有定向循环 , 即如果它是有向无环图(DAG) , 则拓扑排序是可能的 。 任何DAG具有至少一个拓扑排序 , 并且已知这些算法用于在线性时间内构建任何DAG的拓扑排序 。
搜索算法
线性搜索
线性搜索或顺序搜索是一种寻找某一特定值的搜索算法 , 指按一定的顺序检查数组中每一个元素 , 直到找到所要寻找的特定值为止 。 是最简单的一种搜索算法 。
二分搜索算法
「程序猿」最全Python入门算法来了,GitHub超6.8万星
文章图片
二分搜索(英语:binarysearch) , 也称折半搜索(英语:half-intervalsearch) , 对数搜索(英语:logarithmicsearch) , 是一种在有序数组中查找某一特定元素的搜索算法 。 搜索过程从数组的中间元素开始 , 如果中间元素正好是要查找的元素 , 则搜索过程结束;如果某一特定元素大于或者小于中间元素 , 则在数组大于或小于中间元素的那一半中查找 , 而且跟开始一样从中间元素开始比较 。 如果在某一步骤数组为空 , 则代表找不到 。 这种搜索算法每一次比较都使搜索范围缩小一半 。
插值搜索算法
插值查找(InterpolationSearch)是根据要查找的关键字key与顺序表中最大、最小记录的关键字比较后的查找方法 , 它假设输入数组是线性增加的(这个假设的精确度会影响算法的效率 , 但不会影响算法的正确性) 。
跳跃搜索算法
跳跃搜索算法(JumpSearch)跟二分查找算法类似 , 它也是针对有序序列的查找 , 只是它是通过查找比较少的元素找到目标 。 当然它需要通过固定的跳跃间隔 , 这样它相比二分查找效率提高了很多 。
快速选择
快速选择(英语:Quickselect)是一种从无序列表找到第k小元素的选择算法 。 它从原理上来说与快速排序有关 。 与快速排序一样都由托尼·霍尔提出的 , 因而也被称为霍尔选择算法 。 它在实际应用是一种高效的算法 , 具有很好的平均时间复杂度 , 然而最坏时间复杂度则不理想 。 快速选择及其变种是实际应用中最常使用的高效选择算法 。 与快速排序一样 , 快速选择一般是以原地算法的方式实现 , 除了选出第k小的元素 , 数据也得到了部分地排序 。
禁忌搜索
禁忌搜索(TabuSearch , TS , 又称禁忌搜寻法)是一种现代启发式算法 , 由美国科罗拉多大学教授FredGlover在1986年左右提出的 , 是一个用来跳脱局部最优解的搜索方法 。 其先创立一个初始化的方案;基于此 , 算法“移动”到一相邻的方案 。 经过许多连续的移动过程 , 提高解的质量 。
加密算法
凯撒密码
凯撒密码(英语:Caesarcipher) , 或称凯撒加密、凯撒变换、变换加密 , 是一种最简单且最广为人知的加密技术 。 它是一种替换加密的技术 , 明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文 。 例如 , 当偏移量是3的时候 , 所有的字母A将被替换成D , B变成E , 以此类推 。 这个加密方法是以罗马共和时期恺撒的名字命名的 , 当年恺撒曾用此方法与其将军们进行联系 。


推荐阅读