一、概论
1、逻辑+存储+算法
逻辑:线性表(表,栈,队列,串)+非线性结构(树+图)
存储:顺序、链接、索引、散列
抽象数据类型ADT<数据对象D,数据操作P>
先定义逻辑结构(数据对象及其关系),再定义运算(数据操作)。
2、算法特性
穷举法(顺序找K值)、回溯、搜索(树和图遍历)、递归分治(二分找K值、快速排序)、贪心法、动态规划(最短路Floyd算法)
//二分法找K值
template <class Type> int Binsearch(vector<Item<Type>*>& dataList, int length, Type k)
{
int low = 1, high = length, mid;
while (low <= high)
{
mid = (low + high) / 2;
if (k < dataList[mid]->getKey())
high = mid - 1;//右缩检索空间
else if (k>dataList[mid] - > getKey())
low = mid + 1;//左缩检索空间
else return mid;
}
return 0;
}
3、算法效率与度量
加法规则:f1(n)+f2(n)=O(max(f1,f2)) 顺序结构,if,switch
乘法规则: f1(n)*f2(n)=O(f1*f2) for while 结构
常数阶;二分法:对数阶;for循环:线性阶;两个for循环:平方阶
推到大O阶方法:
1、常数1取代所有加法常数
2、只保留最高阶