数据结构与算法笔记
文章平均质量分 83
MonkeyAndy
这个作者很懒,什么都没留下…
展开
-
【蓄水池抽样应用之】如何等概率的从N个元素中选取出K个元素
如何等概率的从N个元素中选取出K个元素?这个问题就是一个蓄水池抽样(Reservoir Sampling),算法可以如下描述: Init : a reservoir with the size: k for i= k+1 to N M=rand转载 2012-06-02 09:33:04 · 1116 阅读 · 0 评论 -
在一个字符串中找到第一个只出现一次的字符。
/***************************************copyright@ andy*http://blog.csdn.net/MonkeyAndy**************************************/题目描述:在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b。思路:用hash原创 2012-09-05 20:09:22 · 752 阅读 · 0 评论 -
【字典树的应用之】百度2012实习生校园招聘笔试题
/--------MonkeyAndy原创,转载请注明出处-----------/http://blog.csdn.net/MonkeyAndy/--------MonkeyAndy原创,转载请注明出处--------------/学习了字典树后想起百度的笔试题可以使用这个方法解决,写下与大家分享,欢迎批评指正,共同进步题目描述:给一个单词a,如果通过交换单词中原创 2012-06-01 11:01:01 · 1271 阅读 · 2 评论 -
Bit-map介绍及其应用
注:本文参考自 http://blog.csdn.net/v_JULY_v ,修正了其中的一些问题感谢原作者所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。如果说了这么多还没明白什么是Bit-map,那么我们来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,原创 2012-07-30 21:47:25 · 551 阅读 · 0 评论 -
一致性hash算法 - consistent hashing
一致性 hash 算法( consistent hashing )张亮consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在cache 系统中应用越来越广泛;1 基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N转载 2012-07-22 23:58:34 · 797 阅读 · 0 评论 -
【组合问题的原理与其递归实现】
以在n个数中选取m(01. 首先从n个数中选取编号最大的数,然后在剩下的n-1个数里面选取m-1个数,直到从n-(m-1)个数中选取1个数为止。2. 从n个数中选取编号次小的一个数,继续执行1步,直到当前可选编号最大的数为m。很明显,上述方法是一个递归的过程,也就是说用递归的方法可以很干净利索地求得所有组合。下面是递归方法的实现:/// 求从数组a[1..n]中任选m个元素的所转载 2012-07-16 11:34:44 · 536 阅读 · 1 评论 -
哈希函数的构造方法以及冲突解决办法
哈希函数的构造方法常用的构造哈希函数的方法有: 1.直接定址法 取关键字或关键字的某个线性函数值为哈希地址。即:H(key)=key 或 H(key)=a·key+b 其中a和b为常数(这种哈希函数叫做自身函数)。 [例如]:有一个从1岁到100岁的人口数字统计表,其中,年龄作为关键字,哈希函数取关键字自身。这样,若要询问25岁的人有多少,则原创 2012-06-23 20:36:14 · 6771 阅读 · 0 评论 -
求两个字符串的(连续的)最长公共子串
转载请注明出处http://blog.csdn.net/MonkeyAndy问题:给出两个字符串,求出这两个字符串的连续的最长公共子序列例如 : char* a="aocdfacddcdfe"; char* b="pmcdfacdfe";连续的最长公共子序列为 “cdfacd”问题分析:思路及算法流程:1、以a串为主串,遍历a串,记录下b串中与a[原创 2012-05-24 16:25:55 · 7449 阅读 · 0 评论 -
线性表顺序表示及合并算法
#define LIST_INIT_SIZE 100//线性表存储空间的初始分配量#define LISTINCREMENT 10//线性表存储空间的分配增量typedef struct{ ElemType *elem;//存储空间基址 int length; //当前长度 int listsize; //当前分配的存储容量(以sizeof(ElemType原创 2012-05-22 21:34:31 · 1065 阅读 · 1 评论 -
内部排序算法以及比较
内部排序内部排序方法的讨论比较排序方法 平均时间 最坏情况 辅助存储简单排序 O(n^2) O((n^2) O(1)快速排序 O(n log n) O(n^2) O(log n)堆排序 O(n log n) O(log n)原创 2012-05-19 17:01:51 · 506 阅读 · 0 评论 -
在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存
写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) 功能: 在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回 9,outputstr所指的值为12原创 2012-05-19 17:06:59 · 1731 阅读 · 0 评论 -
C++内存池(C++ Memory Pool)
/--------------------MonkeyAndy 翻译,转载请注明出处------------------------/http://blog.csdn.net/MonkeyAndy/--------------------MonkeyAndy 翻译,转载请注明出处------------------------/目录前言它的工作原理是什么?翻译 2012-06-07 10:48:14 · 1790 阅读 · 0 评论 -
【随机数应用之】在半径为R的圆内找随机n个点
/---------------MonkeyAndy原创 转载请注明出处------------------/http://blog.csdn.net/MonkeyAndy-------------------------如有错误,欢迎批评指正-------------------------问题描述:设rand(s,t)返回[s,t]之间的随机小数,利用该函数在一个半径为R的原创 2012-06-05 20:27:34 · 3145 阅读 · 1 评论 -
数组al[0,mid-1]和al[mid,num-1]是各自有序的,对数组al[0,num-1]的两个子有序段进行merge,得到al[0,num-1]整体有序
问题描述:数组al[0,mid-1]和al[mid,num-1]是各自有序的,对数组al[0,num-1]的两个子有序段进行merge,得到al[0,num-1]整体有序。要求空间复杂度为O(1)。注:al[i]元素是支持'运算符的。思路:由于要求空间复杂度为O(1),故不能使用归并排序1、遍历0~mid -1,将其与a[mid]相比较,若 a[mid] 2、循环遍历a[m原创 2012-05-16 19:51:01 · 2483 阅读 · 1 评论 -
全排列算法原理和其递归实现
全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为例说明如何编写全排列的递归算法。1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。由于一个数的全排列就是其本身,从而得到以上结果。2、再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4转载 2012-06-04 10:38:53 · 768 阅读 · 0 评论 -
【动态规划之】求最长公共子序列问题
/** ** copyright@andy ** http://blog.csdn.net/MonkeyAndy **/首先介绍动态规划方法的相关知识动态规划方法的基本思想:分成若干个子问题,先求解子问题,然后根据子问题的解求得原问题的解。经分解得到的子问题往往不是互相独立的。可重复利用!其核心思想就是分治,分治方法的特点是分解后的子问题相对独立,可以通过简单的合并算法原创 2012-09-08 23:22:15 · 1404 阅读 · 0 评论