数据结构与算法
文章平均质量分 76
Durant_kevin
love opensource and data analysis^~^
展开
-
经典排序之多路归并
多路归并排序原创 2014-04-16 21:26:12 · 41006 阅读 · 0 评论 -
经典内部排序之交换排序
经典内部排序算法有交换排序、插入排序、原创 2014-04-10 11:52:26 · 1181 阅读 · 1 评论 -
经典排序之插入排序
插入排序插入排序包括:直接插入排序,折半插入排序,希尔排序。1.直接插入排序思想:直接插入排序(Straight Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过原创 2014-04-10 20:51:08 · 1144 阅读 · 1 评论 -
经典排序之分配排序
一、基数排序原创 2014-04-12 23:49:53 · 1843 阅读 · 0 评论 -
求数组的子数组之和的最大值
一个有N个整数元素的一维数组(A[0],A[1],...,A[n-2],A[n-1]),这个数组当然有很多子数组,那么子数组之和的最大值是什么呢?下面将给出3种解法的代码:解法一:int Max::MaxSum1(int *A,int n){ int maxNum=-INF; int sum; for(int i=0;i<n;i++) { sum=0; for(int原创 2014-03-29 10:06:45 · 4164 阅读 · 1 评论 -
质数与合数及其应用
质数与合数摘自维基百科:质数,又称素数,指在大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数(也可定义为只有1和本身两个因数的数)。比1大但不是素数的数称为合数。1和0既非素数也非合数。素数在数论中有着非常重要的地位。质因数分解 即 分解质因数 。每个合数都可以写成几个质数相乘的形式。其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。 分原创 2014-06-04 10:25:27 · 3689 阅读 · 0 评论 -
全排列(递归与非递归实现)
全排列问题在公司笔试的时候很常见,这里介绍其递归与非递归实现。递归算法1、算法简述简单地说:就是第一个数分别以后面的数进行交换E.g:E = (a , b , c),则 prem(E)= a.perm(b,c)+ b.perm(a,c)+ c.perm(a,b)然后a.perm(b,c)= ab.perm(c)+ ac.perm(b)= abc + acb.依次原创 2014-06-05 12:25:34 · 1920 阅读 · 1 评论 -
随机数不是事!^~^
随机数的事总结随机数的那点事,不断总结中......1.产生一个随机数srand(time(0));x=rand();//0~RAND_MAX-12.生成一个[a,b]之间的随机数x=rand()%(b-a+1)+a;3.以概率为Px%,Py%,Pz%(Px、Py、Pz均为整数且Px+Py+Pz=100)生成三个随机数// This functio原创 2014-06-05 19:34:43 · 1035 阅读 · 0 评论 -
最长递增子序列
问题描述找出一个数组中的最长递增子序列LIS(不一定连续,但顺序不能乱),如数组arr={5, 6, 7, 1, 2, 8},其最长递增子序列为{5,6,7,8},长度为4。四种解法直接法遍历数组找出从arr[i]开始的最长递增子序列,复杂度为O(n^2)int lis1(int arr[],int n){ int result=0; int curMax,t原创 2014-05-07 23:32:59 · 1464 阅读 · 7 评论 -
leetcode:Reorder List
问题Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…You must do this in-place without altering the nodes' values.For example,Given {1,2,3,4}, reorde原创 2014-05-18 23:56:55 · 828 阅读 · 0 评论 -
平衡二叉树——AVL树的原理和实现
在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis,他们在1962年的论文《An algorithm for th原创 2014-04-09 16:27:08 · 1437 阅读 · 3 评论 -
红黑树原理
一、红黑树概述 红黑树和我们以前学过的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。不过自从红黑树出来后,AVL树就被放到了博物馆里,据说是红黑树有更好的效率,更高的统计性能。这一点在我们了解了红黑树的实现原理后,就会有更加深切的体会。 红黑树和AVL树的区别在于它使用颜色来标识结点的高度,它所追求的是局部平衡而不是AVL原创 2014-04-10 10:16:28 · 1426 阅读 · 1 评论 -
经典内部排序之选择排序
一、选择排序原创 2014-04-10 20:17:19 · 1077 阅读 · 2 评论 -
外部排序
一、问题的提出 1.待排序的记录数量很大,不能一次装入内存,则无法利用前几节讨论的排序方法(否则将 引起频繁访问内存); 2.对外存中数据的读/写是以“数据块”为单位进行的; 读/写外存中一个“数据块”的数据所需要的时间为: TI/O = tseek + tla + n·twm 其中 tseek 为寻查时间(查找该数据块所在磁道) tla原创 2014-04-17 11:25:32 · 1174 阅读 · 0 评论 -
红黑树--插入
转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7740956一、红黑树概述 红黑树和我们以前学过的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。不过自从红黑树出来后,AVL树就被放到了博物馆里,据说是红黑树有更好的效率,更高的统计性能。这一点在我们了解了转载 2014-04-17 21:32:50 · 763 阅读 · 0 评论 -
红黑树之删除操作
转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7760584 算法导论书上给出的红黑树的性质如下,跟STL源码剖析书上面的4条性质大同小异。 1、每个结点或是红色的,或是黑色的 2、根节点是黑色的 3、每个叶结点(NIL)是黑色的 4、如果一个节点是红转载 2014-04-17 21:35:19 · 1627 阅读 · 0 评论 -
字典树及其应用
字典树定义Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。字典树有3个基本性质: 1、根节点不包含字符,其余的每个节点都包含一个字符; 2、从根节点到某一节点原创 2014-04-18 11:44:55 · 2457 阅读 · 0 评论 -
拓扑排序
一、概述 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前。 通常,这样的线性序列称为满足拓扑次序(TopoiSicai Order)的序列,简称拓扑序列。注意: ①若将图中顶点按拓扑次序排成一行,则图中所有的有向边均原创 2014-04-23 15:41:21 · 1939 阅读 · 0 评论 -
二叉树遍历--非递归实现
二叉树遍历算法的重要性大家都知道,是很多算法的基础,它的递归实现非常简单,相信学过数据结构的同学都应该能够轻松写出来。如果需要写出二叉树的前序遍历、中序遍历以及后续遍历的非递归实现,可能还是需要费点时间。下面给出我的实现方式。前序遍历: 二叉树的前序非递归实现可以按照这样的思路:毫无疑问,我们需要一个栈来作为辅助空间,首先将根节点入栈,当栈不为空时,取出栈顶元素,原创 2014-04-17 16:29:03 · 804 阅读 · 0 评论 -
图的深度优先遍历--邻接表实现
这里用邻接表实现图的深度优先遍历,采用递归实现。#includeusing namespace std;#define VERTEXNUM 5//结点数struct edgenode { int to; int weight; // 边的权值 edgenode *next; }; struct vnode { int from原创 2014-05-11 00:55:21 · 3293 阅读 · 0 评论 -
经典排序算法之归并排序
二路归并与多路归并算法详解一、二路归并原理,把原始数组分成若干子数组,对每一个子数组进行排序,继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组举例无序数组[6 2 4 1 5 9]先看一下每个步骤下的状态,完了再看合并细节第一步 [6 2 4 1 5 9]原始状态第二步 [2 6] [1 4] [5 9]两两合原创 2014-04-10 23:17:42 · 1290 阅读 · 2 评论 -
二叉排序树的建立、插入、删除、查找、4种遍历 C++完整实现
#include#include#includeusing namespace std;typedef int KeyType;#define NUM 13class BinSTree;class BinStreeNode{public: KeyType key; BinStreeNode *lchild; BinStreeNode *rchild; BinStreeN原创 2014-04-01 15:25:44 · 7220 阅读 · 3 评论 -
二分法求多项式的一个根
数学原理二分法求根的数学原理:如果连续函数f(x)在区间[a,b]的两个端点上取值异号,则在该该函数在该区间上必有一个根。解步骤二分法求解步骤与二分查找非常相似。具体如下:1.检查区间的长度,如果小于阈值,则返回中间值,mid=(a+b)/2。2.求中间值对应的函数值,f(mid)。3.如果f(mid)==0,返回mid。4.如果f(mid)与f(a)同号,即f(mid原创 2015-06-01 14:35:11 · 1539 阅读 · 0 评论