摘要:
一个看起来比较规范的代码:1、版本信息2、预处理信息3、库函数引用4、泛型编程5、宏定义6、复制构造函数7、内敛函数8、变量命名规范9、代码的时间空间效率10、错误恢复能力11、规范的注释和缩进代码范例:/***************************************** Project:PriorityQueue** File:priqueue.h** Edition:v1.0.0 Demo** Coder:KingsamChen [MDSA Group]** Last Modify:2011-9-1************************************** 阅读全文
摘要:
很简单,直接贴代码//抽象数据类型表示class Deque{public: Deque(int sz) { size=sz; front=0; rear=0; data=new int[size]; for(int i=0;i<10;i++) data[i]=0; } bool EnQueueTail(int x); int DeQueueHead(); bool EnQueueHead(int x); int DeQueueTail(); void Output();private: int front,rear; int *data; int size;};/*在队尾入队,... 阅读全文
摘要:
循环队列:解决了假溢出问题,让队列的应用更加灵活了一点。关键技巧:判断队空:front=rear判断队满:(rear+1)%size=front 当队尾指针指向队头指针的前一个指针时,队列已满,所以队列中最多可存size-1个元素。抽象数据类型表示://循环队列抽象数据类型class CirQueue{public: //构造函数、析构函数 CirQueue(int sz) { size=sz; front=rear=0; //初始化为0 data=new int[size]; //开辟这个队列存储空间 } ~CirQueue(){} //入队、出队函数 bool EnQueue(co... 阅读全文
摘要:
双向链表是为了解决在链表中访问直接前驱和直接后继的问题。很简单:抽象类定义://双向链表结点结构体struct DouLinkNode{ int data; DouLinkNode *lLink,*rLink;};//双向链表抽象数据类型定义class DouLinkList{public: //构造函数和析构函数 DouLinkList() { head=NULL; current=head; } ~DouLinkList(){} //插入、删除、搜索、输出 dir=0,前驱方向 dir=1,后继方向 bool Insert(int i,int x,int dir); bool Del... 阅读全文
摘要:
单链表思路:1、表示结点,一个数据域,一个链接域,可以采用结构体或者类表示,这里使用结构体表示。为简单起见,数据类型设置为int。2、用类表示单链表这个抽象数据类型,包含数据和操作。1)由于需要一个起始的链表头来开始建立链表,则需声明一个保护类型的指针。2)建立一个类之后首先需要设定类的构造函数和析构函数。3)然后是建立单链表,输出单链表。4)插入、删除结点。5)辅助函数:判断是否为空链表的函数;定位到给定的索引处。单链表的结点用结构体来表示:?12345structLinkNode{intdata; //数据域LinkNode *link; //结点本身的链接域};单链表的抽象数据类型用类表 阅读全文
摘要:
循环链表:只要知道表中任何一个结点的地址,就能遍历表中其他任一结点。这是我写的简单的循环链表:结点定义和抽象数据类型定义:struct CircleNode{ int data; CircleNode *link;};//类定义class CircleList{public: //构造函数析构函数 CircleList() { first=last=NULL; //初始化头指针和尾指针 } ~CircleList(){} //插入、删除、输出、搜索 CircleNode *Search(int i); bool Insert(int i,int x); bool Delete(int i);. 阅读全文
摘要:
最短路径问题是指:从在带权图的某一顶点出发,找出一条通向另一顶点的最短路径。这里仅考虑,非负权值的单源路径最短迪杰斯特拉算法,按路径的递增次序,逐步产生最短路径的算法。首先求出长度最短的一条最短路径,然后参照它求出长度次短的一条最短路径,依次类推,直到从顶点v到其他各顶点的最短路径全部求出为止。迪杰斯特拉是位计算机大神,大师级人物.该算法的思想:设定一个最短路径顶点集合,用于标记,每次找到当前最短路径,然后动态查找改变,下一个最短路径次序。/*Dijkstra算法:(i,j,k)1、声明一个访问过结点集,用于标示每次是否被访问,初始化为假,对应已访问顶点集为空。2、v=0;设置path数组,当 阅读全文
摘要:
吴军博士的《数学之美》给了我很大启发,让我懂得了以下几点:1、那些有卓越成就的人,首先是世界级的技术专家,最后才将技术转换成商业,人应用有自己专长的研究领域,并在这个领域在全世界有名次。2、区别卓越的工程师和三流的工程师在于你知晓并能改进数学之美中提高的信息科学的前沿研究问题和应用问题。读这本书的时候,有一些欣喜,主要是李宗民老师的模式识别课程中提高的很多东西,都在现实中看到了价值,其次上学期学的应用统计方法,矩阵理论,高级数理逻辑,以及数据结构和算法的威力让我很开心。给了我努力钻研和研究的正能量。下面对本书的思路进行一下梳理,也算是一个总结:1、自然语言处理从规则到统计信息论人工智能句法分析 阅读全文
摘要:
这学期修了李宗民老师的《模式识别》课,这门课属于人工智能。主要的应用有语音识别,图像识别,文本分类,视频识别等等。这门课中学到的很多知识,是解决科学问题的一般方法,在吴军博士《数学之美》中,很多业界所用的算法中都有应用。下面对本课中的主要思路进行梳理总结。1、贝叶斯决策分类器的设计先验概率和后验概率最小风险贝叶斯判别2、概率密度函数估计参数估计贝叶斯估计最大似然估计非参数估计方法3、线性判别函数线性判别函数设计的一般步骤线性分类器Fisher线性判别感知准则函数决策树4、聚类分析K均值方法迭代自组织的数据分析方法5、模糊模式识别:主要引入模糊数学中的隶属度的概念最大隶属原则择近原则6、支持向量 阅读全文
摘要:
归并排序也是基于分治法的。归并排序将待归并元素序列分为两个长度相等的子序列,为每一个子序列排序。然后再将他们合并成一个序列。合并两个子序列的过程称为两路归并。编程经验:1、快速解决问题法宝:1、最简单情况,画图分析,纸上执行;2、单步调试,快速查错。2、程序顺便编译,所以后面函数中要用到前面函数的话,那个被依赖函数要先写。/*划分函数:*/void MergeSort(int *copy,int *orign,int start,int end){ if(start<end) //如果子序列的长度大于1 { int mid=(start+end)/2; //2路归并,漏写2 MergeS 阅读全文