首页 > 技术文章 > 算法与数据结构——1.引论

corn-coin 2021-10-29 16:46 原文

概括:

程序=数据结构+算法

programs=data structuresalgorithm

程序设计:为计算机处理问题编制的一组指令集合

算法:处理问题的策略

 

导入理解:

1.1:关于数据组织

 

插入点:如何将数据存储

——此问题可延展为如何在书架上摆放图书,要确保以下两个操作方便实现。

操作1:怎样插入书

操作2:怎样找到指定的书

 

解析

方法一:随便放

操作1:哪里有空放哪里

造成操作2无法进行

 

方法二:按照书名的拼音字母顺序排放

操作2可二分查找

补充:二分查找,又叫折半查找,折半查找要求线性表必须采用顺序存储结构(数组),而且表中元素按关键字有序排列。

操作1插入新书效率太低

 

方法3:将书划分类别,每种类别按照书名拼音字母顺序排放

操作1:先定类别,二分查找确定位置,移出空位

操作2:先定类别,再二分查找

空间与类别要怎分配?

 

结论:解决问题方法的效率跟数据的组织方式有关

 

1.2关于空间使用

实现一个函数print N使得传入一个正整数为N的参数后,能顺利打印从1到N的全部正整数

//循环实现

Void PrintN(int n)

{int I;

For(i=1);i<=n;i++){

Printf("%d\n",N);

}

Return;

}

 

//递归实现

补充:一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的。用递归过程定义的函数,称为递归函数

Void PrintN(int n)

{if(n){

PrintN(n-1);

Printf("%d\n",N);

}

Return;

}

 

令n=100,1000,10000,100000,……

分别测试两个实现:

#include<stdio.h>

Void prinN(int n);

Int main()

{int n;

Scanf("id",&n);

printN(n);

Return 0;

}

//递归非正常终止跳出

结论:解决问题方法的效率跟空间的利用率有关

 

1.3关于算法效率

写程序计算给定多项式在定点x处的值

f(x)=a0+a1x+…+an-1xn-1+anxn

 

 

f(x)=a0+x(a1+x(…+an-1+x(an))…))

 

 

利用clock()函数可以捕捉

clock():捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。

常数CLK_TCK:机器时钟每秒所走的时钟打点数。

 

 

用例:写程序计算给定多项式f(x)=xi,在给定点x=1.1处的值f(1.1)

 

 

测试程序:

 

 

注:此处测试f1与f2是重复的,可以写成一个函数

两个函数跑的太快了,所以结果出来都是零

让被测函数重复运行充分多次,使得测出的总的时钟打点间隔充分长,最后计算被测函数平均每次运行的时间即可

 

 

 

结论:解决问题的方法效率,还跟算法的巧妙程度有关系

 

推荐阅读