算法

算法是一种定义明确的过程,允许计算机解决问题。有很多算法。在这里,我列出了计算机科学中一些广泛使用的算法:排序,搜索,重复编程和动态编程。

排序:排序是一种算法,由一系列指令组成,这些指令将数组作为输入,对数组执行指定的操作,有时称为列表,并输出排序的数组。简单的排序算法是冒泡排序选择排序插入排序

冒泡排序:这是最简单的排序算法。我们从数组的开头开始,如果第一个元素大于第二个元素,则交换前两个元素。然后我们转到下一对,依此类推,不断扫描数组,直到它被排序。O(n 2)平均值和最差值。

1620


选择排序:这是最直观的,不一定有效。使用线性扫描找到最小元素并将其移动到前面(使用前面元素交换它)。然后找到第二个最小的并移动它,再次进行线性扫描。继续这样做,直到所有元素都到位。适合小文件。O(n 2)平均值和最差值。

1620


插入排序:它通过逐个移动元素对数组进行排序。每次迭代都会从输入数据中删除一个元素,并将其插入正在排序的列表中的正确位置。它对于较小的数据集是有效的,但对于较大的列表而言效率非常低。它比Selection Sort和Bubble Sort算法更好。O(n 2)平均值和最差值。

1620

image

搜索:搜索是基于密钥查找内容。有线性搜索二进制搜索

线性搜索:线性搜索是一种在列表中查找目标值的方法。它按顺序检查列表中每个元素的目标值,直到找到匹配项或者直到搜索完所有元素为止。

1620


二进制搜索:二进制搜索是一种有效的算法,用于从有序的项目列表中查找项目。它的工作原理是反复将列表中可能包含该项目的部分分成两半; 直到你将可能的位置缩小到一个。复杂性从O(n)减少到O(logn)。

1620


递归:递归是一种函数或算法自称的计算机编程技术。它应包括具有终止条件的步骤。当条件满足时,每个重复的其余部分从最后一个被调用到第一个重复处理。通过递归解决的最着名的问题是因子数

阶乘数:数n的阶乘是所有小于或等于n的正非零数的乘积。n的阶乘由n!表示。

1620


动态编程:动态编程是一种解决复杂问题的方法,可以将其分解为更简单的子问题集合,只需解决一次子问题,并存储其解决方案。下次出现相同的子问题时,可以查找先前计算的解,从而节省计算时间,但代价是存储空间的适度支出。着名的动态编程问题是Fibonacci数

斐波纳契数:它们是一系列数字,其中每个数字(斐波纳契数)是前两个数字的总和。最简单的是系列1,1,2,3,5,8等。

1620


划分和征服:分而治之算法通过递归地将问题分解为相同或相关类型的两个或更多个子问题来工作,直到这些子问题变得足够简单直接解决。使用分而治之的着名问题是合并排序快速排序

合并排序:将数组分成两半,对每一半进行排序,然后将它们合并在一起。这些半部分中的每一部分都应用了相同的排序算法。最终,它合并了两个单元素数组。O(nlogn)平均值和最差值。

1620

image

快速排序:选取一个随机元素并对数组进行分区,所有小于分区元素的数字都会出现在大于它的所有元素之前。如果我们在元素周围重复分区数组,那么数组最终将被排序。但由于分区元素不能保证为中位数,因此我们的排序可能非常慢。O(nlogn)平均值,O(n 2)最差。

1620


贪婪:贪婪算法做出的选择似乎是当时最好的选择,即做出本地最优选择,希望这种选择能够带来全局最优解决方案。贪婪算法解决的着名问题是霍夫曼编码

霍夫曼编码:霍夫曼编码是一种无损数据压缩算法。其思想是为输入字符分配可变长度代码,分配代码的长度基于相应字符的频率。

1620


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章