《数据结构与算法》课程笔记 第一章

1. 数据结构的基本概念

数据结构两大用途:

  • 用于存放要处理的数据,如迷宫地图。
  • 用于实现算法策略,如迷宫例子中探索方向增量数组、回溯的栈、避免重复走的标志数组或特殊标记。   

1 数据结构由一个四元组来表示

                                          Data_Structure = ( D, L ,S, O )

数据元素、数据元素之间的逻辑关系、逻辑关系在计算机中的存储表示、以及所规定的操作这四部分。

2 数据元素之间的逻辑结构: 

 3 存储结构

  • 顺序存储:把逻辑上相邻的元素存储在物理位置相邻的存储单元中。如:数组
  • 链式存储:在数据元素中添加一些地址域或辅助结构,用于存放数据元素之间的关系。如:链表

 4 数据结构的操作

数据元素的查找、插入、删除、遍历和排序。 

2. 算法的基本概念 

1 算法介绍

算法是满足下述性质的指令序列:

  • 输入:有零个或多个外部量作为算法的输入。
  • 输出:算法产生至少一个量作为输出。
  • 确定性:组成算法的每条指令清晰、无歧义。
  • 有限性:算法中每条指令的执行次数有限,执行每条指令的时间也有限。 

 2 算法复杂性分析

算法复杂性:时间复杂性和空间复杂性

  • N:算法规模。 I:输入 

复杂性渐进分析: (只看高阶项)

  • 可以采用复杂性渐进分析代替详细数学分析来比较算法效率。 

渐进分析的符号:

  • 我们用 f(n) = O(g(n)) 来表示 f(n) 是 O(g(n)) 的一个成员函数而不用传统的 T(n) \in O(f(n)) 来表示。

作图法比较时间复杂度:

  • 多项式的时间复杂度紧渐于最高项的时间复杂度。
  • 对数的时间复杂度都相同,与底数无关。
  • 对数的时间复杂度永远小于次方的时间复杂度。
  • 次方的时间复杂度永远小于指数的时间复杂度。

有时复杂度很难用O(n)表示,比如下面的代码:

i=1;
while(i<n)
    i += i;

到底复杂度多少呢?这里其实是2部分:i=1的复杂度是1,while的复杂度需要计算,肯定大于1,根据我们前面总结的顺序执行流程复杂度规则,整个复杂度取大的,应该是while循环的复杂度。while循环复杂度我们不会计算,但我们会计算循环次数:i 的值变化是:1,2,4,8...2^k,最后一项i=2^(k-1)>=n退出循环,这时2^(k-1)>=n,k>=logn+1,所以循环k=logn+1次,则退出循环,所以时间复杂度就是O(logn)

猜你喜欢

转载自blog.csdn.net/sinat_35483329/article/details/85692934