算法 - 介绍 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间,空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。 算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。 形式化算法的概念部分源自尝试解决希尔伯特提出的判定问题,并在其后尝试定义有效计算性或者有效方法中成形。这些尝试包括库尔特·哥德尔、Jacques Herbrand和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年Emil Leon Post的Formulation 1和艾伦·图灵1937年提出的图灵机。即使在当前,依然常有直觉想法难以定义为形式化算法的情况。-程序员及编程爱好者编程难题解决方案社区,旨为方便技术人员更快的开发代码,社区有全球各大网站的精品技术文章, 每日发表专业编程类与IT类技术文章,旨为打造最全的编程技术社区
经典算法:堆排序算法 堆排序是指用堆这种数据结构所设计的排序算法,堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或大于)它的父节点。 正经程序员 2023-01-25 19
经典算法:插入排序算法 插入排序是一种稳定的排序算法,和我们打扑克牌时,从桌子上抓牌,然后在手上排序的过程类似。它在性能方面不是最好的,因为要一次构建最终的排序数组。但在传统上比大多数其他简单的O(n 2 )算法(如选择排序或冒泡排序)更有效。也用于混合排序,结合了不同的排序算法来提高性能。 正经程序员 2023-01-25 15
经典算法:选择排序算法 选择排序是一种简单直观的排序算法。原理也比较简单,首先在未排序的序列中找到最小/最大元素,存放到排序序列的起始位置。然后再从剩余未排序元素中继续寻找最小/最大元素,然后放到已排序序列的末尾。然后直到所有元素全部排序完成。 正经程序员 2023-01-25 8
经典算法:计数排序算法 计数排序是一种基于整数的排序算法,用于对键位于特定范围内的数组进行排序。它计算每个不同键值的元素总数,然后使用这些计数来确定每个键值在输出中的位置。 正经程序员 2023-01-25 14
经典算法:二分搜索算法 二分查找算法,也称折半搜索算法、对数搜索算法,是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束; 正经程序员 2023-01-25 17
一天一个经典算法:合并排序算法 合并排序(归并排序)是一种高效的排序算法,可以产生稳定的排序,这意味着如果两个元素具有相同的值,则它们在排序序列中的相对位置与它们在输入中的相对位置相同。 正经程序员 2023-01-25 13
经典算法:KMP算法 KMP算法全称Knuth-Morris-Pratt字符串查找算法,可在一个字符串S内查找一个词W的出现位置。一个词在不匹配时,本身就包含足够的信息来确定下一个匹配可能的开始位置,此算法利用这一特性以避免重新检查先前配对的字符。 正经程序员 2023-01-25 15
经典算法:快速排序算法 快速排序是一种高效的就地排序算法,如果实施得当,它的执行速度通常比归并排序和堆排序快两到三倍。快速排序是一种比较排序,这意味着它可以对定义了小于关系的任何类型的项目进行排序。在有效的实现中,它通常不是一个稳定的排序。 正经程序员 2023-01-25 22
经典算法:贝尔曼-福特算法 贝尔曼-福特算法是求解单源最短路径问题的一种算法,由理查德·贝尔曼(Richard Bellman) 和 莱斯特·福特 创立的。有时候这种算法也被称为 Moore-Bellman-Ford 算法,因为 Edward F. Moore 也为这个算法的发展做出了贡献。 正经程序员 2023-01-24 9
经典算法:动态规划 动态规划是一种解决复杂问题的方法,关键思想是将大问题分解为一组更简单的子问题,只解决每个子问题一次,并使用基于内存的数据结构存储解决方案。每个子问题解决方案都以某种方式被索引。通常使用输入参数的值,用于查找。所以,当出现相同的子问题时,无需重新计算解决方案,而是查找以前计算的解决方案,从而节省计算时间,这种存储子问题解决方案的思想就成为动态规划。 正经程序员 2023-01-24 19