目录python
“数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各类联系。这些联系能够经过定义相关的函数来给出。”——Sartaj Sahni,《数据结构、算法与应用》算法
“数据结构是ADT(抽象数据类型 Abstract DataType)的物理实现。”—— Clifford A.Shaffer,《数据结构与算法分析》编程
“数据结构(data structure)是计算机中存储、组织数据的方式。一般状况下,精心选择的数据结构能够带来最优效率的算法。”
——中文维基百科数组
综上:从上面的三种官方定义能够看出,数据结构和算法一般是一块儿出现的。数据结构
只有事先得知数据规模的问题,才能获得处理数据的方法数据结构和算法
哪里有空放哪里,查找图书困难编程语言
二分查找,经过书名的拼音字母不断缩小查找图书的范围,新书来了插入会成为一个问题函数
把书架划分红几块区域,每块具区指定摆放各类类别的书;每块区域内,按照书名的拼音字母顺序排放,斟酌类的分法测试
综上:解决问题方法的效率,和数据的组织方式有关spa
/* c语言实现 */ void PrintN (int N) {int i; for (i=1; i<=N; i++)( printf("%d\n", i); ) return; }
# python语言实现 def print_n(n: int): for i in range(n): print(n)
N过大,代码会直接罢工
/* c语言实现 */ void PrintN (int N) {if (N){ PrintN(N - 1); printf("%d\n", N); } return; }
# python语言实现 def print_n(n: int): if n: print_n(n - 1) print(n)
综上:解决问题方法的效率,和空间的利用效率有关
\[ f(x) = a_0+a_1x+\cdots+a_{n-1}x^{n-1}+a_nx^n \]
对于上述的多项式,咱们可使用如下代码实现:
/* c语言实现 */ double f(int n, double a[], double x) {int i; double p = a[0] for (i=1; i<=n; i++) p += (a[i] * pow(x, i)); return p; }
# python语言实现 def f(n: int, a_list: list, x: float): p = a_list[0] for i in range(1, n): p += (a_list[i] * pow(x, i)) return p
可是上述的方法极其复杂,咱们能够对多项式进行以下化简:
\[ f(x) = a_0+x(a_1+(x(\cdots(a_{n-1}+x(a_n))\cdots)) \]
/* c语言实现 */ double f(int n, double a[], double x) {int i; double p = a[n]; for (i=n; i>0; i--) p = a[i-1] + x*p; return p }
# python语言实现 def f(n: int, a_list: list, x: float): p = a_list[n] for i in range(0,n,-1): p = a_list[i-1] + x*p return p
clock()
:捕捉从程序开始运行到clock()
被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。
常数CLK_TCK:机器时钟每秒所走的时钟打点数。
/* c语言实现 */ #include <stdio.h> #include <time.h> clock_t start, stop; /* clock_t是clock()函数返回的变量类型 */ double duration; /* 记录被测函数运行时间,以秒为单位 */ int main() {/* 不在测试范围内的准备工做写在clock()调用以前*/ start = clock(); /* 开始计时 */ MyFunction(); /* 把被测函数加在这里 */ stop = clock(); /* 中止计时 */ duration = ((double)(stop -start))/CLK_TCK; /* 计算运行时间 */ /* 其余不在测试范围的处理写在后面,例如输出duration的值 */ return 0; }
# python语言实现 import time def main(): start = time.clock() # start = time.process_time() my_function() stop = time.clock() # stop = time.process_time() t = stop - start # 以秒为单位 return t
对于一个九项式的测试程序,运行一次,效果微乎其微,所以可让被测函数重复运行充分屡次,使得测出的总的时钟打点
间隔充分长,最后计算被测函数平均每次运行的时间便可!
综上:解决问题方法的效率,和算法的巧妙程度有关
只描述数据对象集和相关操做集“是什么”,并不涉及“如何作到”的问题,便可以理解为伪代码
Matrix Create( int M, int N )
:返回一个\(M×N\)的空矩阵;int GetMaxRow( Matrix A )
:返回矩阵\(A\)的总行数;int GetMaxCol( Matrix A )
:返回矩阵\(A\)的总列数;ElementType GetEntry( Matrix A, int i, int j )
:返回矩阵\(A\)的第\(i\)行、第\(j\)列的元素;Matrix Add( Matrix A, Matrix B )
:若是\(A\)和\(B\)的行、列数一致,则返回矩阵\(C=A+B\) (不考虑先按行加、先按列加、什么语言实现),不然返回错误标志;Matrix Multiply( Matrix A, Matrix B )
:若是A的列数等于B的行数,则返回矩阵\(C=AB\),不然返回错误标志;综上:抽象不须要关心具体的细节