数据结构与算法
文章平均质量分 75
starbug
这个作者很懒,什么都没留下…
展开
-
一致性哈希算法以及其PHP实现
在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。其中哈希算法是最为常用的算法. 典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每台服务器上,转载 2013-12-22 00:06:04 · 423 阅读 · 0 评论 -
轻松搞定面试中的二叉树问题
版权所有,转载请注明出处,谢谢!http://blog.csdn.net/walkinginthewind/article/details/7518888树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树转载 2013-12-23 17:19:59 · 616 阅读 · 0 评论 -
轻松搞定面试中的链表题
版权所有,转载请注明出处,谢谢!http://blog.csdn.net/walkinginthewind/article/details/7393134链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力。链表的操作也离不开指针,指针又很容易导致出错。综合多方面的原因,链表题目在面试中占据着很重要的地位。本文转载 2013-12-23 17:16:45 · 795 阅读 · 0 评论 -
P、NP、NPC、NP-hard问题
http://yang19890314.blog.51cto.com/1620466/1160588http://www.matrix67.com/blog/archives/105原创 2014-01-10 17:27:29 · 567 阅读 · 0 评论 -
跨越千年的RSA算法
转自http://www.matrix67.com/blog/archives/5100数论,数学中的皇冠,最纯粹的数学。早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的思维游戏中。直到计算机诞生之后,几千年来的数论研究成果突然有了实际的应用,这个过程可以说是最为激动人心的数学话题之一。最近我在《程序员》杂志上连载了《跨越千年的 RSA 算法》,但受篇幅限制,只有转载 2014-01-10 19:44:34 · 819 阅读 · 0 评论 -
”水王“问题
来自编程之美方法一:sort,第n/2个数必定是那个数方法二:int Find(int *id,int N){ int candidate; int nTimes,i; for(i=nTimes=0;i<N;i++) { if(nTimes==0) { candidate=ID[i];原创 2013-12-04 22:10:40 · 804 阅读 · 0 评论 -
求最近点对
见weiss与编程之美// 分治算法求最近点对#include#include#includeusing namespace std;struct point{ double x , y;}p[100005];int a[100005]; //保存筛选的坐标点的索引int cmpx(const point &a , const point &b){ retu原创 2014-01-24 11:39:31 · 513 阅读 · 0 评论 -
求最远点对
问题(编程之美)给定平面上N个点的坐标,找出距离最远的两个点。分析类似于“最近点对问题”,这个问题也可以用枚举的方法求解,时间复杂度O(n^2)。“寻找最近点对”是用到分治策略降低复杂度,而“寻找最远点对”可利用几何性质。注意到:对于平面上有n个点,这一对最远点必然存在于这n个点所构成的一个凸包上(证明略),那么可以排除大量点,如下图所示:在得到凸包以后,可以只在顶转载 2014-01-24 11:47:38 · 1534 阅读 · 0 评论 -
关于序列的“最”系列
http://www.ahathinking.com/archives/tag/%E6%9C%80%E5%A4%A7%E5%AD%90%E6%95%B0%E7%BB%84%E5%92%8C转载 2014-01-24 14:13:53 · 548 阅读 · 0 评论 -
编程之美2.21(只考加法的面试题)
转自http://blog.csdn.net/yutianzuijin/article/details/10300067 网上存在很多对该问题的解答,但是很多解答都有错误,比较正确的是http://blog.csdn.net/lyso1/article/details/5399146,但是问题解法较为复杂,在此将从另一个思路对问题进行解答,很大程度简化了算法正确性的证明。-----转载 2014-01-24 16:32:11 · 592 阅读 · 0 评论 -
堆实现
/** @file heap.c* @brief 堆,默认为小根堆,即堆顶为最小.* @author soulmachine@gmail.com*/#include /* for malloc() */#include /* for memcpy() */typedef int heap_elem_t; // 元素的类型/*** @struct* @brief 堆的结构体5原创 2013-12-21 22:33:49 · 628 阅读 · 0 评论 -
不使用任何循环及库函数,计算字符串长度
(阿里云2012)在不使用循环语句(for、while、do...while)、goto语句及任何库函数的情况下,写一个程序计算一个输入字符串的长度,字符串的长度不超过64M字符。int len(char *p){ if (*p) { return len(p+1)+1; } else { return 0; }原创 2013-12-21 17:30:37 · 1180 阅读 · 0 评论 -
从1....n中随机输出m个不重复的数
csdn上看到的一帖子 http://topic.csdn.net/u/20120825/20/6171393d-15ea-4a50-ba30-78d1d24974e3.html,是关于一种不重复随机算法,可以计算0 ~ n中不重复的m个数。[cpp] view plaincopy#include #include usi转载 2013-12-20 15:04:26 · 2046 阅读 · 0 评论 -
旋转数组查找
一、无重复元素int binary_search_rotate_arry(int *a, int n, int x){ int low = 0, high = n - 1, mid; while(low <= high) { mid = low + ((high - low) >> 1); if(a[mid] == x)原创 2013-12-20 15:55:38 · 560 阅读 · 0 评论 -
数组中的数分为两组,使得两个组的和的差的绝对值最小
题目:数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小 数组中的数的取值范围是0比如a[]={2,4,5,6,7},得出的两组数{2,4,6}和{5,7},abs(sum(a1)-sum(a2))=0;比如{2,5,6,10},abs(sum(2,10)-sum(5,6))=1,所以得出的两组数分别为{2,10}和{5,6}。背包?NPC?原创 2013-12-20 16:44:41 · 3442 阅读 · 0 评论 -
Morris遍历
本文主要解决一个问题,如何实现二叉树的前中后序遍历,有两个要求:1. O(1)空间复杂度,即只能使用常数空间;2. 二叉树的形状不能被破坏(中间过程允许改变其形状)。通常,实现二叉树的前序(preorder)、中序(inorder)、后序(postorder)遍历有两个常用的方法:一是递归(recursive),二是使用栈实现的迭代版本(stack+iterative)。这原创 2013-12-21 21:00:15 · 1320 阅读 · 1 评论 -
随机数问题
题目:已知随机函数rand(),以p的概率产生0,以1-p的概率产生1,现在要求设计一个新的随机函数newRand(), 使其以1/n的等概率产生1~n之间的任意一个数。解决思路:可以通过已知随机函数rand()产生等概率产生0和1的新随机函数Rand(),然后调用k(k为整数n的二进制表示的位数)次Rand()函数,得到一个长度为k的0和1序列,以此序列所形成的整数即为1--n之间的数字。注转载 2013-12-21 15:44:04 · 556 阅读 · 0 评论 -
五笔字典序列编码(腾讯面试)
前几天朋友跟我说了一道面试题:五笔的编码范围是a到y的25个字母,从1位到4位的编码,如果将五笔的编码按字典序排序,形成数组如下:a, aa, aaa, aaaa, aaab, aaac, ..., b, ba, baa, baaa, baab...yyyx, yyyy其中a的索引是0,aa的索引是1,aaa的索引是2,aaaa的索引是3,以此类推:1)、编写一个函数,输入转载 2013-12-21 16:24:18 · 1030 阅读 · 0 评论 -
几个数的和为定值或者接近定值问题
1、搜狗:有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M。 需要选出若干个x,使这几个x的和与 M 最接近。 请描述实现算法,并指出算法复杂度2、一个整数数组,有n个整数,如何找其中m个数的和等于另外n-m个数的和?原创 2013-12-21 17:10:57 · 843 阅读 · 0 评论 -
最长回文子串
方法一:时间O(N^2) 空间O(N^2)// A dynamic programming solution for longest palindr.// This code is adopted from following link// http://www.leetcode.com/2011/11/longest-palindromic-substring-part-i.htm原创 2013-12-04 20:22:25 · 530 阅读 · 0 评论 -
最大子数组之和
一、最大和小于0时,和为0int maxSubArraySum(int a[], int size){ int max_so_far = 0, max_ending_here = 0; int i; for(i = 0; i < size; i++) { max_ending_here = max_ending_here + a[i];原创 2013-12-11 18:38:18 · 660 阅读 · 0 评论 -
Manacher’s algorithm(最长回文子串)
首先用一个非常巧妙的方式,将所有可能的奇数/偶数长度的回文子串都转换成了奇数长度:在每个字符的两边都插入一个特殊的符号。比如 abba 变成 #a#b#b#a#, aba变成 #a#b#a#。 为了进一步减少编码的复杂度,可以在字符串的开始加入另一个特殊字符,这样就不用特殊处理越界问题,比如$#a#b#a#。下面以字符串12212321为例,经过上一步,变成了 S[] = "$#1#2#2转载 2013-12-19 20:31:51 · 491 阅读 · 0 评论 -
25道常见的算法面试题
Problem 1 : Is it a loop ? (判断链表是否有环?)Assume that wehave a head pointer to a link-list. Also assumethat we know the list is single-linked. Can you come up an algorithm to checkwhether this link原创 2014-03-12 17:54:06 · 797 阅读 · 0 评论 -
关于二分查找的多个问题
版权所有,转载请注明出处,谢谢!http://blog.csdn.net/walkinginthewind/article/details/8937978二分查找,最基本的算法之一,也是面试中常被考察的重点,因为基本的算法最能反映出一个人的基础是否扎实。本文对二分查找相关题目做一个总结。题目列表:1. 给定一个有序(非降序)数组A,求任意一个i使得A[i]等于tar原创 2013-12-23 17:13:00 · 940 阅读 · 0 评论 -
有N个数,其中2个数出现了奇数次(这两个数不相等),其他数都出现偶数次,问用O(1)的空间复杂度,找出这两个数,不需要知道具体位置,只需要知道这两个值。
/* This finction sets the values of *x and *y to nonr-epeating elements in an array arr[] of size n*/void get2NonRepeatingNos(int arr[], int n, int *x, int *y){ int xor = arr[0]; /* Will hold x原创 2013-12-21 17:02:53 · 2393 阅读 · 1 评论 -
排序算法
一、直接插入排序void insertion_sort(int a[],const int start,const int end){ int tmp; int i,j; for(i = start + 1;i < end;i++) { tmp = a[i]; for(j = i - 1; j >= start &&原创 2014-01-02 13:53:57 · 583 阅读 · 0 评论 -
实现atoi
Implement atoi to convert a string to an integer.Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input原创 2013-12-05 23:33:45 · 481 阅读 · 0 评论 -
反转一个整数的位
int reverseBits(unsigned x){ int val = 0; for(int i = 0;i < 32;i++) { val = (val<<1) | (x&0x1); x >>= 1; } return val;}原创 2014-03-23 16:44:27 · 575 阅读 · 0 评论 -
归并求逆序对数
int mergeCount(int a[],int b[],int start,int end){ if(start+1 == end) return 0; int mid = start + (end-start>>1); int i = start; int j = mid; int k = start; int cnt =原创 2014-04-05 17:12:46 · 602 阅读 · 0 评论 -
快速取幂、幂取模
int pow(int a,int b){ int ret = 1; while(b != 0) { if(b & 0x1) ret *= a; a *= a; b >>= 1; } return ret;}int powMod(int a,int b,int n){ i原创 2014-04-07 20:16:23 · 810 阅读 · 0 评论 -
KMP算法
void ComputeNext(const char *p,int next[]){ const int n = strlen(p); next[0] = -1; for(int i = 1,j = -1;i < n;i++) { while(j > -1 && p[j+1] != p[i]) j = next[j];原创 2014-04-07 22:29:03 · 687 阅读 · 0 评论 -
最长递增子序列
int lis(int a[],const int n){ int len = 0; int f[n+1]; for(int i = 0;i < n;i++) { f[i] = 1; for(int j = 0;j < i;j++) if(a[i] > a[j] && f[i] < f[j]+1)原创 2014-04-08 23:25:03 · 721 阅读 · 0 评论 -
Trie树详解及其应用
转自http://blog.csdn.net/hackbuteer1/article/details/7964147一、知识简介 最近在看字符串算法了,其中字典树、AC自动机和后缀树的应用是最广泛的了,下面将会重点介绍下这几个算法的应用。 字典树(Trie)可以保存一些字符串->值的对应关系。基本上,它跟 Java 的 HashMap 功能相同,都是 key-v转载 2014-03-11 00:06:23 · 531 阅读 · 0 评论 -
轻松搞定面试中的红黑树问题
版权所有,转载请注明出处,谢谢!http://blog.csdn.net/silangquan/article/details/18655795 连续两次面试都问到了红黑树,关键两次都没有答好,这次就完整地来学习整理一下。没有学习过红黑树的同学请参考:> Chapter 13 Red-Black Trees Chapter 14 Augmenting转载 2014-03-10 23:52:50 · 726 阅读 · 0 评论 -
字符串压缩(华为2014,机试)
#include#include#include#define MAX_RLEN 50 /* Returns the Run Length Encoded string for the source string src */char *encode(char *src){ int rLen; char count[MAX_RLEN]; int len = strlen(src); /* If a原创 2013-12-04 11:01:51 · 729 阅读 · 0 评论 -
搜狐笔试题:给定一个实数数组,按序排列(从小到大),从数组从找出若干个数,使得这若干个数的和与M最为接近,描述一个算法,并给出算法的复杂度。
http://bbs.csdn.net/topics/370218935究竟有没有好的解法原创 2013-12-19 14:40:29 · 1959 阅读 · 0 评论 -
标准库函数实现
1、memcpy面试中如问到memcpy的实现,那就要小心了,这里有陷阱。先看下标准memcpy()的解释:void *memcpy(void *dst, const void *src, size_t n);//If copying takes place between objects that overlap, the behavior is u原创 2013-12-04 11:40:08 · 779 阅读 · 0 评论 -
删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个
void delSpace(char s[]){ char *p = s; int flag = 1; int i = 0; while(*p != '\0') { if(*p != ' ') s[i++] = *p; else { while(*p == '原创 2013-12-27 10:57:06 · 777 阅读 · 0 评论 -
N皇后(位运算)
Follow up for N-Queens problem.Now, instead outputting board configurations, return the total number of distinct solutions.class Solution { //http://www.matrix67.com/blog/archives/266pub原创 2014-02-25 00:02:03 · 677 阅读 · 0 评论 -
找出最大连续自然数个数
http://blog.csdn.net/xiajun07061225/article/details/8706276貌似geeks上也有,待研究原创 2013-12-11 21:22:22 · 765 阅读 · 0 评论