随笔分类 -  Data Structure

摘要:void BubbleSort(int *pData,int cout )//冒泡算法,可可以加个表示、flag 如果一趟没有元素交换说明已经有序。{ int iTmep=0; for (int i=0;itemp)12 {13 temp=pData[j];14 pos=j;15 }16 }17 pData[pos]=pData[i];18 pData[i]=temp;19 }20 } 1 void InsertSo... 阅读全文
posted @ 2013-08-20 17:00 SolarJupiter 阅读(211) 评论(0) 推荐(0)
摘要:递归程序和费递归程序困扰我很久了,前几天网上看到一个文章,非常不错。http://wenku.baidu.com/view/816b0608ba1aa8114431d9c6.html 阅读全文
posted @ 2013-08-12 17:46 SolarJupiter 阅读(251) 评论(0) 推荐(0)
摘要:Huffman算法(哈夫曼):算法对一个由树组成的深林进行,一棵树的权等于它的树叶频率的和。任意选取最小权值的;两棵树T1,T2,并形成以T1,T2的新树,将这样的过程进行C-1次,算法之初存在C颗单节点树,算法结束时,这棵树就是最有哈夫曼树。哈夫曼树必然是个满树,其中两个频率最小的字符必是两个最深的节点。在相同深度上任意两个节点处的字符可以交换而不影响最优性。动态规划是强大的算法技巧,她提供解的一个起点。它基本上市首先求解一些更简单问题的分治算法的范例,重要的区别在于这些更简单的问题不是原问题的明确分割。因为子问题反复被求解,所以重要的是将他们的解记录在一个表中而不是重新计算它们。某些情况之 阅读全文
posted @ 2013-06-27 16:02 SolarJupiter 阅读(154) 评论(0) 推荐(0)
摘要:排序插入排序 1 void InsertionSort(ElementType A[],int N) 2 { 3 int j,p; 4 ElementType Tmp; 5 for(p=1;p<N;p++)//N-1次循环 6 { 7 Tmp=A[p]; 8 for(j=p;j>0&&Tmp<A[j-1];j--) 9 A[j]=A[j-1];10 A[j]=Tmp;11 }12 }由于嵌套循环每一次花费N次迭代,因此插入排序时间为O(... 阅读全文
posted @ 2013-05-31 18:00 SolarJupiter 阅读(409) 评论(0) 推荐(0)
摘要:堆是一颗被完全填满的二叉树,有可能的例外是在底层,底层的元素被从左到右被填满;一颗高为h的完全二叉树有2h到2h+1-1个节点;完全二叉树的高是¸logN¸;因为完全二叉树很有规律,所以它可以用一个数组表示而不需要指针。对于数组实现上,任一位置i上的元素,其左儿子在2i上,右儿子在2i+1中,它的父亲在¸i/2¸上。一个堆结构将由一个数组,一个代表最大值的整数以及当前的堆大小组成。 1 //优先队列的声明 2 #ifndef _BinHeap_H 3 4 struct HeapStruct; 5 typedef struct HeapStruct *Pr 阅读全文
posted @ 2013-05-30 18:00 SolarJupiter 阅读(222) 评论(0) 推荐(0)
摘要:树 1 #ifndef _Tree_H 2 struct TreeNode; 3 typedef struct TreeNode *Position; 4 typedef Struct TreeNode *SearchTree; 5 6 SearchTree MakeEmpty(Search T); 7 Position Find(ElemtntType X,SearchTree T); 8 Position FindMin(SearchTree T); 9 Position FindMax(SearchTree T); 10 SearchTree Insert(Eleme... 阅读全文
posted @ 2013-05-28 14:00 SolarJupiter 阅读(285) 评论(0) 推荐(0)
摘要:桶式排序: 设置一个数组Count,大小为M,并初始化为零,于是Count有M个单元,开始时都是空的。当Ai被读入是Count[Ai]增加1,在所有的输入被读进纸盒,扫描数组Count,打印出排好序的表。该算法耗费O(M+N);基数排序是桶式排序(bucket sort)的推广。基数排序就是多趟桶式排序;算法步骤如下:例子对0-999的一组数字排序:第一趟基数排序后的桶:01512343641252162787290123456789第二趟基数排序后的桶81021651272927125343640123456789最后一趟的基数排序为:6427810125216343512729012345 阅读全文
posted @ 2013-05-24 10:26 SolarJupiter 阅读(241) 评论(0) 推荐(0)
摘要:假设数组A有n个元素,数组B有n个元素,两个数组中寻找相同元素。最简单直观的算法是 两个for循环遍历数组元素,但是此时的算法复杂度是O(n2),效率非常低。发散思维利用数组C下标来标记一个数组元素,用C[i]中的元素i出现次数,然后对于数组A中的元素,查找对应的C[i]中元素值是不是为0;此时算法时间消耗在: 1,将B映射到C中,需要时间O(n);2,查找相同元素时,需要遍历A数组,需要时间O(n);这个情况下,总的时间复杂度就是O(n+n);这个算法适用于元素不是特别分散的情况下,否则C需要比较大的空间。典型的“以空间换时间”;解决该B数组元素分散的方法可以利用hash表的方法,设计一个合 阅读全文
posted @ 2013-05-23 11:12 SolarJupiter 阅读(913) 评论(0) 推荐(0)
摘要:1,若一棵二叉树具有10个度为2的结点,则度为0的结点个数是( 11)。 答:度为0的结点=度为2的结点+1,即为 n0=n2+1 n=n0+n1+n2 n=1+n1+2*n2 可 以推出 n0=n2+12.在下列排序算法中,哪一个算法的时间复杂度与初始排序无关( D)。A. 插入排序 B. 起泡排序 C. 快速排序 D. 堆排序 此题如果选项换成直接选择排序也是对的,堆排序(HeapSort)是一树形选择排序。堆排序的特点是:在排序过程中,将R[l..n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系,在当前无序区中选择关键字最大(或最小... 阅读全文
posted @ 2013-05-23 00:34 SolarJupiter 阅读(286) 评论(1) 推荐(0)
摘要:第7章 排序一、选择题1.某内排序方法的稳定性是指( D )。A.该排序算法不允许有相同的关键字记录B.该排序算法允许有相同的关键字记录C.平均时间为0(n log n)的排序方法 D.以上都不对2.下面给出的四种排序法中( D )排序法是不稳定性排序法。 A. 插入 B. 冒泡 C. 二路归并 D. 堆3.下列排序算法中,其中( D )是稳定的。A. 堆排序,冒泡排序 B. 快速排序,堆排序 C. 直接选择排序,归并排序 D. 归并排序,冒泡排序4.稳定的排序方法是( B )A.直接插入排序和快速排序 B.折半插入排序和起泡排序C.简单选择排序和四路归并排序 D.树形选择排序和shell排序 阅读全文
posted @ 2013-05-22 23:31 SolarJupiter 阅读(1386) 评论(0) 推荐(0)
摘要:表、栈、和队列对于Node点的定义 1 #ifdef _List_H 2 struct Node; 3 typedef struct Node *PtrToNode; 4 typedef PtrToNode List; 5 typedef PtrToNode Position; 6 List MakeEmpty(List L); 7 int IsEmpty(List L); 8 int IsLast(Position P ,List L); 9 Position Find (ElementType X,List L);10 void Delete(ElementType X,List L);1 阅读全文
posted @ 2013-05-22 16:21 SolarJupiter 阅读(291) 评论(0) 推荐(0)
摘要:int BinarySearch(const ElementType A[],ElementType X,int N){ int Low } 阅读全文
posted @ 2013-05-20 18:03 SolarJupiter 阅读(157) 评论(0) 推荐(0)
摘要:O(logN)<O(N)关于递归算法,long intFib(int N) { if(N《=1) return 1; else return Fib(N-1)+Fib (N-2);} Fib函数对于N>=2时,运行时间 T(N)=T(N-1)+T(N-2)Fib(N)<(5/3)n,可见这个程序是运行时间是以指数的速度增长;这个程序之所以运行缓慢,是由于存在大量多余的工作要完成,在Fib(N-1)+Fib(N-2)中,第一次调用Fib(N-1)实际上计算了FIb(N-2),这个信息被抛弃而在第二次调用时又重新计算了一遍,抛弃的信息量递归的合起来并导致巨大的... 阅读全文
posted @ 2013-05-20 14:41 SolarJupiter 阅读(369) 评论(0) 推荐(0)
摘要:数据挖掘十大经典算法国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 2006年12月评选出了数据挖掘领域的十大经典算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART.不仅仅是选中的十大算法,其实参加评选的18种算法,实际上随便拿出一种来都可以称得上是经典算法,它们在数据挖掘领域都产生了极为深远的影响。1. C4.5C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法. C4.5算法 阅读全文
posted @ 2012-12-07 09:15 SolarJupiter 阅读(261) 评论(0) 推荐(0)
摘要:结构化程序设计的核心就是“自上而下设计”与模块化设计:将整个程序需求从上而下,由大到小分解成小的单元和模块,分别开发。OO程序设计三个重要的特性:继承,封装,多态;例如 for i=1 to n do j<-i;for k=j+1 to n dox=x+1;请问 x=x+!执行次数的时间复杂度O(n*n);先分析内层的循环一共执行1 至n-1次;即为∑(n-i)=∑n-∑i=n*n-n*(n-1)/2=n*(n-1)/2计算二维数组在内存中的位置(以列为主是java c/c++ pascal语言的数组存放方式,以行为主是Fortran语言存放方式)数组A(m,n),假设a为数组A在... 阅读全文
posted @ 2012-11-20 08:25 SolarJupiter 阅读(225) 评论(0) 推荐(0)