阾接表:
边:
顶点下标
下一条边的地址
顶点:
数据
指向第一条边的指针
图:
由顶点组成的数组
顶点数量cnt
优点:可以节约存储空间,计算入度麻烦。
十字链表:
边:
弧尾下标
弧头下标
指向相同弧尾的下一条边
指向相同弧头的下一条边
顶点:
数据
指向第一条边的指针
指向入度的边
图:
由顶点组成的数组
顶点数量cnt
阾接多重表:
是一种专门存储无向图的一种结构。
边:
i,j 两个互相依附的顶点的下标
inext 指向下一个依附i项点的边
jnext 指向下一个依附j项点的边
顶点:
数据
指向与顶点有关系的一条边。
图:
由顶点组成的数组。
顶点数量
算法:
输入: 算法具有0个或多个输入
输出: 算法至少有1个或多个输出
有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
确定性:算法中的每一步都有确定的含义,不会出现二义性
可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完
如果评价一个算法:
时间复杂度:由于计算机的性能不同,无法准确统计出算法执行所需要的时间。
因此我们用算法执行的次数来代表算法的时间复杂度,O(公式),一般忽略常数。
常见的时间复杂度:
// O(1)
printf("%d",i);
// O(logn)
for(int i=n; i>=0; i=i/2)
{
printf("%d",i);
}
// O(n)
for(int i=0; i<n; i++)
{
printf("%d",i);
}
// O(nlogn)
for(int j=0; j<n; j++)
{
for(int i=n; i>=0; i=i/2)
{
printf("%d",i);
}
}
// O(n^2)
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
printf("%d",i*j);
}
}
查找算法:
顺序查找:
对待查找的数据没有要求,时间复杂度: O(n)
二分查找:
对待查找的数据必须有序,时间复杂度: O(logn)
块查找
哈希查找