
数据结构与算法
wangwenwen
这个作者很懒,什么都没留下…
展开
-
哈希表
1. 哈希表(1) 哈希表(散列表,杂凑表)根据设定的哈希函数和处理冲突的方法,将一组关键字映像到一个有限的连续的地址集上,并以关键字在地址集中的象作为记录在表中的存储位置,这种表称为哈希表,又叫散列表,杂凑表。(2) 哈希函数常用除留余数法。H(key) = key MOD p。(3) 冲突什么是冲突?H(key1)=H(key2),且key1≠key2,称冲突。处理转载 2013-09-28 23:12:05 · 946 阅读 · 0 评论 -
五大算法二:动态规划
一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通转载 2014-10-21 16:38:03 · 716 阅读 · 0 评论 -
五大算法一:分治算法
一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其转载 2014-10-21 16:34:08 · 605 阅读 · 0 评论 -
五大算法四:回溯算法
1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 许多复杂的转载 2014-10-21 16:54:50 · 1130 阅读 · 0 评论 -
五大算法三:贪心算法
一、基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。转载 2014-10-21 16:49:12 · 612 阅读 · 0 评论 -
快速排序算法
void qsort(int s[], int l, int r){ int i, j, x; if (l < r) { i = l; j = r; x = s[i]; while (i < j) { while(i x) j--; /* 从右向左找第一个小于x的数原创 2014-08-20 16:51:42 · 535 阅读 · 0 评论 -
最长公共子串LCS算法
转载地址:http://www.cnblogs.com/dartagnan/archive/2011/10/06/2199764.html LCS问题就是求两个字符串最长公共子串的问题。解法就是用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹配情况,若是匹配则为1,否则为0。然后求出对角线最长的1序列,其对应的位置就是最长匹配子串的位置.下面是字符串21232523311转载 2014-10-22 09:48:44 · 957 阅读 · 0 评论 -
题目:N个元素取出最大的K个元素
解法一 快速排序:利用快速排序中的partition操作,经过partition后,pivot左边的序列sa都大于pivot右边的序列sb;如果|sa|==K或者|sa|==K-1,则数组的前K个元素就是最大的前K个元素,算法终止;如果|sa|如果|sa|>K,则从sa中寻找前K大的元素。分析: 一次partition(arr,begin,end)操作的复杂度为end-begi原创 2014-10-22 11:00:04 · 1786 阅读 · 0 评论 -
二叉排序树
二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树;#include using names转载 2014-10-18 16:49:07 · 642 阅读 · 0 评论 -
平衡二叉树(AVL)
平衡二叉树(Balanced binary tree)是由阿德尔森-维尔斯和兰迪斯(Adelson-Velskii and Landis)于1962年首先提出的,所以又称为AVL树。定义:平衡二叉树或为空树,或为如下性质的二叉排序树: (1)左右子树深度之差的绝对值不超过1; (2)左右子树仍然为平衡二叉树. 平衡因子BF=左子树深度-右子树深度.平衡二叉转载 2013-09-28 22:54:40 · 885 阅读 · 0 评论 -
数据结构中排序和查找各种时间复杂度
(1)冒泡排序 冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。(2)选择排序 选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的。…… 例子说明好多了。序列5 8 5 2 9, 我们知道第一遍选择第1个元转载 2013-09-28 23:26:43 · 9455 阅读 · 0 评论 -
[整理]数据结构----位图法
一、定义 位图法就是bitmap的缩写。所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。在STL中有一个bitset容器,其实就是位图法。二、数据结构unsigned int bit[N];在这个数组里面,可以存储 N * sizeof(int) * 8个数据,但是最大的数只能是N * siz转载 2014-01-17 11:20:23 · 765 阅读 · 0 评论 -
[整理]数据结构-----堆
一、堆的定义堆的定义是:n个元素的序列{k1,k2,…,kn},当且仅当满足如下关系时被成为堆 (1)Ki 2i且 ki 2i-1 或 (2) Ki >= k2i且 ki >= k2i-1 (i = 1,2,…[n/2])当满足(1)时,为最小堆,当满足(2)时,为最大堆。最大堆和最小堆的例子:堆常用来实现优先队转载 2014-01-17 10:48:25 · 782 阅读 · 0 评论 -
最短路径算法
/* * 最短路径,迪杰斯特拉算法和弗洛伊德算法(采用邻接矩阵存储) * */#include#define MAX_VERTEX_NUM 20#define INFINITE 10000 //当做无穷大//图的定义typedef struct { int vertexNum; char vertex[MAX_VERTEX_NUM]; int arc[MAX_VERT转载 2014-08-20 17:15:03 · 622 阅读 · 0 评论 -
五大算法五:分支界限法
一、基本描述 类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。 (1)分支搜索算法 所谓“分支”就是采用广度优先的策略,依转载 2014-10-21 17:03:10 · 737 阅读 · 0 评论 -
二分查找算法
#include using namespace std;int BinarySerach(int *array, int size, int val){ int l = 0, r = size -1, tmp; while (l < r) { tmp = (l+r)/2; if (val == array[tmp]) { return tmp; } el原创 2014-11-25 14:21:20 · 574 阅读 · 0 评论 -
常见算法的时空复杂度O(X)
http://bigocheatsheet.com/转载 2014-10-20 11:35:47 · 925 阅读 · 0 评论 -
题目:找数组中出现一次的两个数
题目:一个特别大的整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n) ,空间复杂度是O(1) 。原创 2014-07-30 14:11:22 · 604 阅读 · 0 评论