Algorithm
wangqinghao
这个作者很懒,什么都没留下…
展开
-
韩信点兵
《孙子算经》 问题: 今有物不知其数:三三数之剩二,五五数之剩三,七七数之剩二,问物几何???” 《孙子算经》 解答:三人同行七十稀,五树梅花廿一支,七子团圆正半月,除百零五便得知。 只要让士兵先后以三人一排、五人一排、七人一排地变换队形,他就能知道最少总人数? 实例:三人一排多2人,五人一排多1人,七人一排多6人,总人数?原创 2012-08-31 21:38:18 · 774 阅读 · 0 评论 -
栈求最小值
题目: 实现一个栈,它有三个操作。 1、压栈push。 2、出栈pop。 3、找出当前栈的最小元素。 要求:这三个操作的时间复杂度是O(1)。 解: 使用两个数组(或链表),element和least,它们的大小一致。element数组用来存放压栈和出栈的元素;least数组用来存放当前栈中最小值的下标。 1、push操作。把需要压栈的元素A放进element数组栈转载 2012-10-27 20:19:05 · 596 阅读 · 0 评论 -
经典算法
排序排序算法:http://baike.baidu.com/view/297739.htm冒泡排序法:http://baike.baidu.com/view/1313793.htm起泡法:http://baike.baidu.com/view/174304.htm鸡尾酒排序:http://baike.baidu.com/view/1981861.htm桶排序转载 2012-10-26 16:38:50 · 458 阅读 · 0 评论 -
压缩编码算法
当输入char* sz = "aaaabbbbqqqffffff"时,输出结果为a4b4q3f6 void Print(char sz[]){ char one = sz[0]; int nCount = 1; std::cout << one << " "; while (*sz){ sz++; if (one == *sz){ nCount+原创 2012-10-27 10:51:39 · 705 阅读 · 0 评论 -
数学归纳法
(一)第一数学归纳法: 一般地,证明一个与自然数n有关的命题P(n),有如下步骤: (1)证明当n取第一个值n0时命题成立。n0对于一般数列取值为0或1,但也有特殊情况; (2)假设当n=k(k≥n0,k为自然数)时命题成立,证明当n=k+1时命题也成立。综合(1)(2),对一切自然数n(≥n0),命题P(n)都成立。(二)第二数学归纳法: 对于某个与自然数原创 2012-11-04 20:44:48 · 994 阅读 · 0 评论 -
按层次遍历二叉树算法
#define MaxSize 1000typedef char ElemType; typedef struct node { ElemType data; struct node *lchild; struct node *rchild;} BTNode;//创建二叉树void CreateBTNode(BTNode *&b,char *str){原创 2012-10-25 09:48:23 · 8753 阅读 · 0 评论 -
google笔试大题(2012\10\15)
1. 编码找出小于或者等于整数N的全部素数2.一个数组有N个数,这些数正好为0,1,...,N-1,不过顺序混乱,要求对其进行排序。(要求任何数只能和0进行交换)3.现在有删除,修改,插入字符函数,通过对一串不完全相等的数进行修改使得他们相等。(如:A(abcfe) 和 B(abf),只需要将A中c和e去掉,A和B就相等,共进行了两次操作) 要求使用最少的删除、修改、插入字符操作次数实现原创 2012-10-16 20:07:14 · 646 阅读 · 0 评论 -
Buddy算法实现
Buddy算法是为了解决linux内存管理提出的一种高效管理算法,主要解决内存碎片问题,其基本思路如下:首先把内存中的页框(一个页框大小4kb,对应一个页面,物理的)分为连续的1,2,4,8,16,32,64,128,256,512,1024个页框数量,这样当你需要分配6个页面时,首先查看连续8个页面中大小是否为1,如果是则直接将这8个页面分配出去,如果连续8个页面也没有就去看连续16个页面是转载 2012-10-14 10:08:56 · 1619 阅读 · 0 评论 -
Buddy算法(雅虎全球研发中心笔试题)
1.Buddy算法linux对空闲内存空间管理采取buddy算法, Buddy算法:把内存中所有页面按照2^n划分,其中n=0~5,每个内存空间按1个页面、2个页面、4个页面、8个页面、16个页面、32个页面进行六次划分。划分后形成了大小不等的存储块,称为页面块,简称页块,包含一个页面的页块称为1页块,包含2个页面的称为2页块,依次类推。每种页块按前后顺序两两结合成一对Buddy“转载 2012-10-14 10:03:14 · 1464 阅读 · 0 评论 -
查找中位数
查找中位数是面试中经常出现的一类题。用快速排序的思想可以解决这种问题,算法如下:1.抽取数组的第一个元素作为中间值,用快速排序的思想进行一次调整,将比中间值小的放在中间值的左边,比中间值大的放在中间值的右边。2.如果中间值的索引等于数组长度的一半,那么就找到了。3.如果中位数的索引比数组长度的一半大的话,那么在中间值的索引到数组的结尾这个期间内找第(数组长度的一半-中位数)大的数。转载 2012-10-09 22:56:20 · 9168 阅读 · 0 评论 -
B树、B-树、B+树、B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,转载 2012-10-01 14:51:38 · 650 阅读 · 0 评论 -
C++ 希尔排序
typedef int KeyType;typedef int Other_Data;typedef struct{ KeyType key; Other_Data other_data;}RecordType;int ShellInsert(RecordType record[],int nLength,int delta){ int j = 0 ; for原创 2012-09-02 22:44:24 · 648 阅读 · 0 评论 -
Douglas-Peucker算法
Douglas-Peucker算法(该算法名字够吓人,其实思想很简单)在数字化时,要对曲线进行采样,即在曲线上取有限个点,将其变为折线,并且能够在一定程度上保持原有的形状。经典的Douglas-Peucker算法步骤如下:(1)在曲线首尾两点A,B之间连接一条直线AB,该直线为曲线的弦;(2)得到曲线上离该直线段距离最大的点C,计算其与AB的距离d;(3)比较该距离与预先给原创 2012-11-21 11:14:45 · 18152 阅读 · 1 评论