算法-开始

Go中实现的算法(用于教育)

这些算法仅用于演示目的。Go标准库中有许多排序实现可能具有更好的性能。

有关所有算法的完整列表,请参见:DIRECTORY.md另请参阅:https://algorithmswithgo.com

Sort Algorithms

Bubble

alt text

来自Wikipedia:Bubble sort,有时被称为sinking sort,是一种简单的排序算法,它反复遍历要排序的列表,比较每一对相邻项,如果它们的顺序不对,就交换它们。重复遍历列表,直到不需要交换为止,这表示列表已排序。

Properties

  • 最坏情况性能O(n^2)
  • 最佳情况性能O(n)
  • 平均案例性能O(n^2)
View the algorithm in action

Insertion

alt text

来自Wikipedia:insertionsort是一种简单的排序算法,每次只构建一个项目的最终排序数组(或列表)。与快速排序、堆排序或合并排序等更高级的算法相比,它在大型列表上的效率要低得多。

Properties

  • 最坏情况性能O(n^2)
  • 最佳情况性能O(n)
  • 平均案例性能O(n^2)
View the algorithm in action

Merge

alt text

{排序算法,{100science,}通常在@pedia中是高效的排序算法。大多数实现产生一个稳定的排序,这意味着实现在排序输出中保持相同元素的输入顺序。Mergesort是一种分而治之的算法,由johnvonneumann在1945年发明。

Properties

  • 最坏情况性能O(n log n)
  • 最佳情况性能O(n)
  • 平均案例绩效O(n)
View the algorithm in action

Quick

alt text

来自Wikipedia:Quicksort(有时称为partition-exchangesort)是一种有效的排序算法,是一种系统化的方法,用于按顺序排列数组的元素。

Properties

  • 最坏情况性能O(n^2)
  • 具有three-way分区的O(n logn)或O(n)的最佳情况性能
  • 平均案例性能O(n^2)
View the algorithm in action

Selection

alt text

来自Wikipedia:该算法将输入列表分为两部分:已排序项的子列表,该子列表在列表的前面(左)从左到右建立,另一部分是剩余待排序项的子列表,它们占据了列表的其余部分。最初,已排序的子列表为空,未排序的子列表是整个输入列表。该算法通过在未排序子列表中找到最小(或最大的,取决于排序顺序)的元素,将其与最左边的未排序元素交换(交换)(按排序顺序排列),然后将子列表边界向右移动一个元素。

Properties

  • 最坏情况性能O(n^2)
  • 最佳情况性能O(n^2)
  • 平均案例性能O(n^2)
View the algorithm in action

Shell

alt text

来自Wikipedia:Shellsort是insertion sort的泛化,它允许交换相距很远的项。这样做的目的是排列元素列表,这样,从任何地方开始,考虑第n个元素,就会得到一个排序的列表。这样的列表被称为h-sorted。它可以被单独地认为是相互交织的。

Properties

  • 最坏情况性能O(nlog2 2n)
  • 最佳情况性能O(n log n)
  • 平均案例性能取决于间隙序列
View the algorithm in action

Time-Complexity Graphs

比较排序算法的复杂性(气泡排序、插入排序、选择排序)


Search Algorithms

Linear

alt text

来自Wikipedia:linear search或sequential search是一种在列表中查找目标值的方法。它依次检查列表中的每个元素的目标值,直到找到匹配项或搜索完所有元素。线性搜索在最差的线性时间运行,最多进行n次比较,其中n是列表的长度。

Properties

  • 最坏情况性能O(n)
  • 最佳案例绩效O(1)
  • 平均案例绩效O(n)
  • 最坏情形空间复杂度O(1)迭代

Binary

alt text

来自Wikipedia:Binary search,也称为half-interval搜索或对数搜索,是一种在排序数组中查找目标值位置的搜索算法。它将目标值与数组的中间元素进行比较;如果它们不相等,则排除目标不能位于的那一半,然后继续搜索剩余的一半,直到成功为止。

Properties

  • 最坏情况性能O(log n)
  • 最佳案例绩效O(1)
  • 平均案例性能O(log n)
  • 最坏情况空间复杂度O(1)

Ciphers

Caesar

在密码学中,凯撒密码又称凯撒密码、移位密码、凯撒密码或凯撒移位,是最简单、最广为人知的加密技术之一。它是一种替换密码,明文中的每一个字母都被字母表中某个固定位置的字母代替。例如,如果左移3,D将被a替换,E将变为B,依此类推。这种方法是以朱利叶斯·凯撒的名字命名的,他在私人信件中使用了这种方法。凯撒密码所执行的加密步骤通常作为更复杂的方案的一部分,如维根埃密码,在ROT13系统中仍有现代应用。与所有的single-alphabet替代密码一样,凯撒密码很容易被破解,在现代实践中基本上没有提供通信安全性。

Transposition

在密码学中,换位密码是一种加密方法,通过这种方法,明文单元(通常是字符或字符组)所占的位置按照规则系统进行移位,从而使密文构成明文的排列。也就是说,单元的顺序被改变(明文被重新排序)。在数学上,用双目标函数对字符的位置进行加密,用逆函数进行解密。