【算法】Notes for Chapter 1

  • 【最大公约数】两个不全为0的非负整数m和n的最大公约数记为 g c d ( m , n ) gcd(m,n) gcd(m,n),代表能够整除m和n的最大正整数。
  • E u c l i d ′ s Euclid's Euclids a l g o r i t h m algorithm algorithm】重复利用下列等式 g c d ( m , n ) = g c d ( n , gcd(m,n)=gcd(n, gcd(m,n)=gcd(n, m m m m o d mod mod n ) n) n)
  • 【算法】
    在这里插入图片描述
  • 【sieve of Eratosthenes】产生一个不大于给定整数n的连续质数序列,埃拉托色尼筛法,理念是筛去2的倍数,3的倍数…直到没有可以消去的元素。考虑其中倍数仍未消去的最大整数p,第一个应该考虑的数应该是 p 2 p^2 p2(满足条件 p 2 ≤ n p^2≤n p2n,等价于p不会大于 n 1 / 2 n^{1/2} n1/2向下取整的值),因为p更小的倍数2p,3p直到p(p-1)都在前面的筛去过程中已经筛去了。
  • 【算法】
    在这里插入图片描述
    在这里插入图片描述
  • 如果一个排序算法保留了等值元素在输入中的相对顺序,就说该算法是稳定的(Stable). 一个输入序列中包含两个相等的元素,对应位置是 i , j i,j i,j,并且有 i < j i<j i<j,整个序列排序完成后,上述两个元素的位置是 i ′ , j ′ i',j' i,j,此时同样有 i ′ < j ′ i'<j' i<j. 一般来说,将相隔很远的键进行交换的算法虽然不稳定,但速度往往很快,例如希尔排序。
  • 如果一个算法不需要额外的存储空间(个别的存储单元可以允许),我们就说它是在位的(In-Place).
  • 【旅行商问题(Traveling salesman problem,TSP)】就是找出访问n个城市的最短路径,并且保证每个城市只访问一次,其主要应用包括路径规划、电路板和超大规模集成电路的制造、X射线晶体学以及基因工程等。
  • 【图着色问题(Graph Coloring Problem)】就是要用最少种类的颜色为图中的顶点着色,并且保证任何邻接的两个顶点异色,该问题源于很多现实应用,例如安排事务进度:如果用顶点代表事务,事务之间以边相连,当且仅当独立事务无法排定同时发生时,图着色问题的解才能生成一张最优的日程表。
  • 【数组Array】是n个相同数据类型的元素构成的序列,它们连续存储在计算机的存储器中。无论位于数组的什么位置,都能够用相同的常量时间访问其中的元素。数组可以用于实现字符串,字符串是字母的序列,并且以一个特殊字符来标记字符串的结束。
  • 【链表Linked List】是零个或多个节点node构成的序列,每个节点包含两类信息,一是数据,二是一个或多个称为指针Pointer的链接,指向链表中的其他元素(我们用称为null的特殊指针表明某个节点没有指向别的节点)。和数组不同,访问单链表中元素所需的时间依赖于元素位置,但插入和删除效率很高,只需要改变链接的指针,并且也无需事先分配存储空间。
  • 【表头Header】链表常常从一个称为表头的特殊节点开始,其中包含着有关链表的信息,例如链表当前的长度、指向末尾元素的指针。
  • 【列表】数组和链表都属于线性列表(Linear List简称为列表List),并且是最为主要的表现形式。
  • 【栈Stack】栈是一种插入(入栈)和删除(出栈)操作都只能在端部进行的列表,这一端叫做栈顶Top,栈对于实现递归算法必不可少,很重要的深度优先搜索DFS也是利用栈实现。
  • 【队列Queue】队列的删除(出队)操作在一端进行,这一端称为队列头Front;而插入(入队)操作在另一端进行,这一端称为队列尾Rear,重要的广度优先搜索BFS是利用队列实现的。
  • 栈与队列都是特殊类型的列表。
  • 【优先队列Priority Queue】是一些来自于全序域中数据项的集合,最常见的全序域是整数或实数,优先队列一种精巧的实现结构叫做堆Heap,当然也可以直接基于数组来实现。
  • 【邻接矩阵】无向图的邻接矩阵是一个 n × n n×n n×n的布尔矩阵A,若存在边 ( i , j ) (i,j) (i,j),那么 A [ i , j ] = 1 A[i,j]=1 A[i,j]=1,并且对于无向图而言,A是一个对称矩阵。若边上有权重 W W W,那么 A [ i , j ] = W A[i,j]=W A[i,j]=W,不存在边的地方以 ∞ ∞ 表示。
  • 【邻接链表】每一个顶点用一个链表表示,该链表包含和该顶点相连的所有顶点。
    在这里插入图片描述
    在这里插入图片描述
  • 采用邻接矩阵存储的图,对其使用DFS和BFS的时间效率都是 O ( ∣ V ∣ 2 ) O(|V|^2) O(V2);相比之下,采用邻接链表形式的,其时间效率为 O ( ∣ V ∣ + ∣ E ∣ ) O(|V|+|E|) O(V+E).
  • 对于图而言,连通性Connectivity和无环性Acylicity是重要的,二者都基于路径Path的概念:u到v的路径是图G中始于u终于v的邻接顶点序列,如果其中没有顶点是重复的,该路径是一条简单路径。
  • 如果一个图不具有连通性,那么它会有至少两个连通分量,如下:
    在这里插入图片描述
  • 自由树Free Tree就是连通无回路图,其边数总比顶点数少一, ∣ E ∣ = ∣ V ∣ + 1 |E|=|V|+1 E=V+1.
  • 高度为h,有n个顶点的二叉树,满足 l o g 2 n ≤ h ≤ n − 1 log_2^n≤h≤n-1 log2nhn1,其中 l o g 2 n log_2^n log2n需要向下取整。

猜你喜欢

转载自blog.csdn.net/weixin_44246009/article/details/108188995