欢迎来到一句话经典语录网
我要投稿 投诉建议
当前位置:一句话经典语录 > 心得体会 > 算法课程设计心得体会

算法课程设计心得体会

时间:2016-11-24 15:01

算法课程设计报告

一、算法分析的基本方法二、算法设计的基本策略

建筑构造课程设计心得体会

2.背包问题:#include stdio.h#define N 3 \\\/*物品的最大件数*\\\/#define M 20 \\\/*背包的载重*\\\/\\\/* 此函数为贪心算法,参数x表示解向量,参数n表示物品的件数,参数w表示物品的 重量构成的数组,参数m表示背包的载重,参数b表示单位重量收益按非增次数排列 时的下标变化情况。

*\\\/ void GreedyKnapsack(float *x,int n,float *w,float m,int *b){ int i; float u=m; for(i=0;iu)break; x[b[i]]=1.0; u=u-w[b[i]]; } if(ip[0]\\\/w[0]>p[1]\\\/w[1],则a[N]={2,0,1}*\\\/ float x[N];\\\/*解向量*\\\/ int i,j,m,r; float w[]={18,15,10};\\\/*依次存储n个物品重量的数组*\\\/ float p[]={25,24,15};\\\/*依次存储n个物品收益的数组*\\\/ float pw[N];\\\/*依次存储单位重量收益p[i]\\\/w[i]的数组*\\\/\\\/*输出各物品重量*\\\/ printf(\\\ 各物品的重量:\\\ ); for(i=0;it) { m=j; t=pw[j]; } } if(m!=i) { t=pw[i]; pw[i]=pw[m]; pw[m]=t; r=a[i]; a[i]=a[m]; a[m]=r; } }\\\/*输出单位重量收益按非增次数排列时的下标变化情况*\\\/ printf(\\\ 单位重量收益按非增次数排列时的下标变化情况:\\\ ); for(i=0;i

内部排序算法比较课程设计

按平均时间将排序分为四类: (1)平方阶(O(n2))排序 一般称为简单排序,例如直接插入、直接选择和冒泡排序; (2)线性对数阶(O(nlgn))排序 如快速、堆和归并排序; (3)O(n1+£)阶排序 £是介于0和1之间的常数,即0<£<1,如希尔排序; (4)线性阶(O(n))排序 如桶、箱和基数排序。

各种排序方法比较 简单排序中直接插入最好,快速排序最快,当文件为正序时,直接插入和冒泡均最佳。

影响排序效果的因素 因为不同的排序方法适应不同的应用环境和要求,所以选择合适的排序方法应综合考虑下列因素: ①待排序的记录数目n; ②记录的大小(规模); ③关键字的结构及其初始状态; ④对稳定性的要求; ⑤语言工具的条件; ⑥存储结构; ⑦时间和辅助空间复杂度等。

不同条件下,排序方法的选择 (1)若n较小(如n≤50),可采用直接插入或直接选择排序。

当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。

(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜; (3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。

快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短; 堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。

这两种排序都是不稳定的。

若要求排序稳定,则可选用归并排序。

但本章介绍的从单个记录起进行两两归并的 排序算法并不值得提倡,通常可以将它和直接插入排序结合在一起使用。

先利用直接插入排序求得较长的有序子文件,然后再两两归并之。

因为直接插入排序是稳定的,所以改进后的归并排序仍是稳定的。

(4)在基于比较的排序方法中,每次比较两个关键字的大小之后,仅仅出现两种可能的转移,因此可以用一棵二叉树来描述比较判定过程。

当文件的n个关键字随机分布时,任何借助于比较的排序算法,至少需要O(nlgn)的时间。

百度文库里也有说明,详见:下面是一段测试程序:用系统计时器算时间复杂度。

#include#include#include#include#define LIST_INIT_SIZE 50000int bj1,yd1,n;clock_t start_t,end_t;typedef struct { int key; }ElemType;typedef struct { ElemType *elem; int length;}SqList;void addlist(SqList &L){ int i;a: printf(请输入你要输入的个数:); scanf(%d,&n); if(n>50000) { printf(超出范围重新输入!!!\\\ ); goto a; } L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem)exit(0); L.length=0; for(i=1;i30000)goto b; ++L.length; }}void SelectSort(SqList &L)\\\/\\\/选择{ start_t=clock(); int i,j,k,bj=0,yd=0; for(i=1;iL.elem[j+1].key) { L.elem[0].key=L.elem[j].key; L.elem[j].key=L.elem[j+1].key; L.elem[j+1].key=L.elem[0].key; yd+=3; } } i++; } end_t=clock(); printf(比较次数为 %d移动次数为 %d\\\ ,bj,yd); printf(排序用时为 %f\\\ ,float(end_t-start_t)\\\/CLK_TCK);}void InsertSort(SqList &L)\\\/\\\/直接插入{ start_t=clock(); int i,j,yd=0,bj=0; for(i=2;i<=L.length;i++) { if(L.elem[i].keyL.elem[j].key) { k=j; bj++; } } if(i!=k) { L.elem[0].key=L.elem[i].key; L.elem[i].key=L.elem[k].key; L.elem[k].key=L.elem[0].key; yd+=3; } w++; } d=d\\\/2; w=1; } end_t=clock(); printf(比较次数为 %d移动次数为 %d\\\ ,bj,yd); printf(排序用时为 %f\\\ ,float(end_t-start_t)\\\/CLK_TCK);}void BeforeSort(){ yd1=0,bj1=0;}void display(int m,int n){ printf(比较次数为 %d移动次数为 %d\\\ ,m,n);}int Partition(SqList &L,int low,int high)\\\/\\\/快速排序 { int pivotkey; L.elem[0]=L.elem[low]; yd1++; pivotkey=L.elem[low].key; while (low=pivotkey) --high; L.elem[low]=L.elem[high]; bj1++; yd1++; while (low

求《计算机图形学》(项志刚)和《算法设计与分析》(第2版)的总结

计图形学我没学过,但学法设计与分析。

挺难的,最好你还是从一就好好学不然上完了发现什么都不知道,不过那个课考试好办。

因为内容是一些编程思想,很难考核。

就《算法设计与分析》这门,在进入正式内容之前,会讲一些基础概念和介绍算法复杂度的分析,如时间复杂度、空间复杂度,如何评价一个算法的优劣。

这个内容虽然数据结构里讲过,但在这门学科里讲得要系统深入一些。

然后就是会讲到一些经典的算法思想,比如递归和分治策略、贪心算法、回溯法、分支限界法、随机化算法等等,每个种算法是教给你一种策略、一种思想,其实只要这里的两三种思想深化到你的头脑中了,对你的编程是很有帮助的。

这门课以讲算法思想为主,另外也会介绍一些相关内容,比如动态规划、线性规划、网络流什么的,还有NP完全理论与近似算法。

学习数据结构的心得体会

数据结构学习体会及教学建议时间过的很快,一转眼一学期的数据结构课程就已经快要告一段落了,在接触这么课以前,我觉得编程无非就是会写代码就好了。

然而事实上数据结构对于程序来说,有着非常重要的地位。

随着计算机应用领域的不断扩大,非数值计算的问题占据了当今计算机应用的绝大部分,简单的数据类型已经远远不能满足需要,个数据元素之间的复杂关系已经不是普通数学方程式能够表达的了,所以数据结构就扮演了十分重要的角色。

在学期初,我觉得数据结构还是比较简单的,但可能由于之前c语言学习对指针掌握的不够熟练,导致在数据结构中接触到与指针有关的问题,例如线性表,堆栈,队列,二叉树等问题的时候,都会显得有些吃力。

但是在不断学习数据结构的过程中我也不断加强了对指针的学习,现在我已经能够基本掌握指针的相关知识并且能够熟练运用了。

这一学期的学习下来我发现想要学好数据结构有以下几点经验{虽然可能我的数据结构学的并不是很好}1.初步了解算法思想、原理想要弄清楚一个算法的实现,首先要知道这个算法的大致原理,这是最简单的一步,也是最基础的一步,只有明白算法想要干什么,才能弄清楚相应的代码段是为什么2.钻研课本代码段对于书上的算法代码,我们一定要仔细钻研每一步的具体含义和目的,在此基础上深入的了解算法的实现过程,而不是一味的四级硬背,不仅无聊,而且效率低下。

3.查找各种算法资料例如排序算法,其实历史上有很多不同的排序算法,书上

声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。联系xxxxxxxx.com

Copyright©2020 一句话经典语录 www.yiyyy.com 版权所有

友情链接

心理测试 图片大全 壁纸图片