
算法/数据结构~
QQ276592716
这个作者很懒,什么都没留下…
展开
-
poj 1664 放苹果 将m个相同的苹果放进n个相同的盘子中,盘子允许空,有多少种方法
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。Input第一行是测试数据的数目t(0 Output对输入的每组数据M和N,用一行输出相应的K。Sample Input1转载 2011-10-08 10:24:00 · 13099 阅读 · 0 评论 -
互斥:软件方法实现之Peterson算法
德国数学家Dekker曾提出了两个进程互斥的算法,不过Dekker算法过于复杂。而Peterson提出了简单且一流的方法。实现如下:boolean flag[2];int turn;void P0(){ while(true){ flag[0]=true; turn=1; while(flag[1转载 2013-04-28 19:53:08 · 1098 阅读 · 0 评论 -
A星寻路算法介绍
这篇blog是由iOS Tutorial Team的成员 Johann Fradj发表的,他目前是一位全职的资深iOS开发工程师。他是Hot Apps Factory的创始人,该公司开发了App Cooker。 学习A星寻路算法是如何工作的!你是否在做一款游戏的时候想创造一些怪兽或者游戏主角,让它们移动到特定的位置,避开墙壁和障碍物呢?如果是的话,转载 2013-05-23 13:59:19 · 1060 阅读 · 0 评论 -
SkipList跳表基本原理
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。用跳表吧,跳表是一种随机化的数据结构,目前开源软件 Redis转载 2013-06-12 20:22:58 · 644 阅读 · 0 评论 -
编程之美-快速寻找满足条件的2个数(扩展问题)的一个解法的注释
原题是: 能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值? 这个可以将数组排序,然后前后各一个指针向中间靠拢寻找。扩展问题1: 如果将问题中的“两个数字”改成“三个数字”或“任意个数字时”,你的解答时什么? 写了一段代码,查找一个集合中是否存在一个子集,其中数字之和等于给定的值(given),有则返回子集,没有就返回空。/* *原创 2013-07-05 19:17:26 · 970 阅读 · 0 评论 -
单链表反转/逆序的三种方法(整理)
/* 单链表反转/逆序 */Status ListReverse(LinkList L){ LinkList current,pnext,prev; if(L == NULL || L->next == NULL) return L; current = L->next; /* p1指向链表头节点的下一个节点 */ pnext = curren原创 2013-07-08 22:12:20 · 1552 阅读 · 0 评论 -
跳表SkipList
跳表SkipList1.聊一聊跳表作者的其人其事2. 言归正传,跳表简介3. 跳表数据存储模型4. 跳表的代码实现分析5. 论文,代码下载及参考资料 . 聊一聊作者的其人其事 跳表是由William Pugh发明。他在 Communications of the ACM June 1990, 33(6) 668-676 发表了Skip lis转载 2013-06-27 19:28:48 · 762 阅读 · 0 评论 -
编程珠玑 12 取样问题
问题:从0到n-1的n个数中,随机选取m个数字,并且顺序打印出来,可以使用标准库的rand()函数方法:使用Knuth方法,使用rand() % n 代码:[cpp] view plaincopy#include #include #include #include using name转载 2013-06-29 22:08:32 · 986 阅读 · 0 评论 -
求一个整数的二进制中1的个数
题目:输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。分析:这是一道很基本的考查位运算的面试题。包括微软在内的很多公司都曾采用过这道题。一个很基本的想法是,我们先判断整数的最右边一位是不是1。接着把整数右移一位,原来处于右边第二位的数字现在被移到第一位了,再判断是不是1。这样每次移动一位,直到这个整数变成0为止。现在的转载 2013-07-04 10:16:20 · 1441 阅读 · 0 评论 -
一个算法的分析
http://blog.youkuaiyun.com/qq276592716/article/details/9240269int popcount_1(UINT32 x){ x = (x & m1) + ((x >> 1) & m1); x = (x & m2) + ((x >> 2) & m2); x = (x & m4) + ((x >> 4) & m4);原创 2013-07-04 10:28:32 · 741 阅读 · 0 评论 -
编程之美2.14扩展问题1 求子数组和的最大值(首尾可以相连)
整体思路:问题的解可以分为两种情况:1)解没有跨过A[n-1]到A[0],即普通的求子数组和的最大值2)解跨过A[n-1]到A[0]对第二种情况,只要找到从A[0]开始和最大的一段(A[0],...,A[j])(0M_2=A[i]+...A[n-1]+A[0]+...+A[j]如果iM_2=A[0]+...+A[n-1] - 子数组和为负的最小值(数组元素全为正则返转载 2013-07-05 22:34:41 · 831 阅读 · 0 评论 -
编程之美2.15——二维子数组之和的最大值
问题:1. 求二维数组(矩阵)的子矩阵之和的最大值。2. 求三维数组(长方体)的子方体之和的最大值。解法:先计算出以左上角的元素(1,1)和当前元素(i,j)为顶点对的子矩阵的部分和,部分和的计算如下PS[i][j] = A[i][j]+PS[i-1][j]+PS[i][j-1]-PS[i-1][j-1]在上一篇文章中我们发现一维的解答可转载 2013-07-06 00:09:01 · 1058 阅读 · 0 评论 -
SPFA算法
【算法流程】算法大致流程是用一个队列来进行维护。 初始时将源加入队列。 每次从队列中取出一个元素,并对所有与他相邻的点进行松弛,若某个相邻的点松弛成功,则将其入队。 直到队列为空时算法结束。这个算法,简单的说就是队列优化的bellman-ford,利用了每个点不会更新次数太多的特点发明的此算法SPFA——Shortest Path Faster Algorithm,它可以在转载 2013-08-22 11:30:16 · 779 阅读 · 0 评论 -
双连通分量low的解释~
定义:在无向连通图中,如果删除该图的任何一个结点都不能改变该图的连通性,则该图为双连通的无向图。一个连通的无向图是双连通的,当且仅当它没有关键点。算法:1.对图进行先深搜索,计算每一个结点v的先深标号dfn[v]。2. 计算所有结点v的low[v]是在先深生成树上按照后根遍历的顺序进行的。因此,当访问结点v时它的每个儿子y的low[y]已经计算完毕,这时low[v]取下面三原创 2013-08-24 14:53:04 · 1045 阅读 · 0 评论 -
外部排序技术之多路归并
外部排序技术之多路归并重点:败者树的创建调整函数1.外部排序概述外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。外部排序最常用的算法是多路归并排序,即将原文件分解成多个能够一次性装人内存的部分,分别把每一部分调入内存完成排序。然后,对已经排序的子文件进行归并排序。转载 2013-08-15 09:07:18 · 948 阅读 · 0 评论 -
lamdba算子之布尔值理解
原文在这里http://blog.youkuaiyun.com/g9yuayon/article/details/1126396里面谈到 bool的定义let TRUE = lambda x y . xlet FALSE = lambda x y . y由此引出let BoolAnd = lambda x y . x y FALSElet BoolOr = lamb原创 2013-12-06 15:13:41 · 764 阅读 · 0 评论 -
并查集(union-find set or DisjointSets)
l 并查集:(union-find sets)一种简单的用途广泛的集合. 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数等。最完美的应用当属:实现Kruskar算法求最小生成树。l 并查集的精髓(即它的三种操作,结合实现代码模板进行理解):1、Make_Set(x) 把每一个元素初始化为一个转载 2013-04-10 11:14:15 · 3253 阅读 · 0 评论 -
KL距离
KL距离,是Kullback-Leibler差异(Kullback- Leibler Divergence)的简称,也叫做相对熵(Relative Entropy)。它衡量的是相同事件空间里的两个概率分布的差异情况。其物理意义是:在相同事件空间里,概率分布P(x)的事件空间,若用概率分布 Q(x)编码时,平均每个基本事件(符号)编码长度增加了多少比特。我们用D(P||Q)表示KL距离,计算公式如下转载 2013-04-02 17:01:39 · 815 阅读 · 0 评论 -
判断两个链表是否有公共节点并返回第一个公共节点
判断两个链表是否有公共节点的方法最简单的就是遍历到每个链表的最后一个节点,看他们是否是同一个节点:如果是同一个节点的话,那么两个链表肯定有公共节点:解释:因为链表是线性结构,不想树那样的非线性分叉结构从链表的定义,就知道:[c-sharp] view plaincopytypedef struct LNode{转载 2013-03-19 00:09:04 · 1046 阅读 · 0 评论 -
关于多核程序设计技术一书中的cache利用~
1个取n以下素数的代码~inline long Strike(bool composite[],long i,long stride,long limit){ for (;i<limit;i+=stride) composite[i]=true; return i;}long CacheUnfriendlySieve(long n){ long count=0;原创 2012-01-08 16:20:40 · 581 阅读 · 0 评论 -
libmemcached中的consistent hash算法~
翻了下libmemcached的源码,看了下consistent hash的算法实现,贴出来:static uint32_t dispatch_host(const memcached_st *ptr, uint32_t hash){ switch (ptr->distribution) { case MEMCACHED_DISTRIBUTION_CONSISTENT:原创 2012-03-24 18:22:10 · 1410 阅读 · 0 评论 -
算法导论小结-散列表
By: 潘云登Date: 2009-7-18Email: intrepyd@gmail.comHomepage:http://blog.youkuaiyun.com/intrepydCopyright:该文章版权由潘云登所有。可在非商业目的下任意传播和复制。对于商业目的下对本文的任何行为需经作者同意。转载 2012-03-27 16:35:07 · 1048 阅读 · 0 评论 -
二叉搜索树的插入和删除
题目:2叉搜索树的插入和删除 要求(1)任意选顶一个2叉搜索树用先序遍历 中序遍历 和后序遍历显示该2叉搜索树(2)动态显示出在2叉搜索树中插入一个元素时树的变化过程 要求演示出所有可能的情况(3)动态显示出 在2叉搜索树中删除一个元素时的变化过程要求演示出所有的可能的情况 #include #define max 10struct BinTreeNode转载 2012-03-28 11:05:11 · 2293 阅读 · 0 评论 -
算法导论中的快速排序C源码~
看了网上很多的快速排序代码,都是前后扫描改分割位的。看了算法导论,顺其思路的C代码~#include int a[8]={3,5,4,8,1,2,0,7};void quicksort(int* a,int p,int r){ int q; if (p<r) { q=partition(a,p,r); quicksort(a,p,原创 2012-03-12 21:02:45 · 1004 阅读 · 1 评论 -
手机号码查找算法(基数树)
typedef struct mctree_node mctree_node;struct mctree_node{ mctree_node *child[10]; //节点内包含10个子节点 mctree_node *parent; //当前节点的父节点 dpl_uint8_t le转载 2012-03-28 13:45:59 · 1152 阅读 · 0 评论 -
计数排序及其扩展思路
(1)原理和代码以及时间复杂度分析 1.计数排序的原理:设被排序的数组为A,排序后存储到B,C为临时数组。所谓计数,首先是通过一个数组C[i]计算大小等于i的元素个数,此过程只需要一次循环遍历就可以;在此基础上,计算小于或者等于i的元素个数,也是一重循环就完成。下一步是关键:逆序循环,从length[A]到1,将A[i]放到B中第C[A[i]]个位置上。原理是:C[A[i]]转载 2012-03-15 20:25:09 · 525 阅读 · 0 评论 -
基数排序
今天学了基数排序,据说他的时间复杂度也是O(n),他的思路就是:没有计数排序那么理想,我们的数据都比较集中,都比较大,一般是4,5位。基本没有小的数据。那我们的处理很简单,你不是没有小的数据嘛。我给一个基数,例如个位,个位都是[0-10)范围内的。先对他进行归类,把小的放上面,大的放下面,然后个位排好了,在来看10位,我们也这样把小的放上面,大的放下面,依次内推,直到最高位排好。那么不就排转载 2012-03-15 20:51:03 · 626 阅读 · 0 评论 -
线性期望时间选择问题C语言
直接上代码#include #define SIZE (20) int main (void) ; int select (int * const array, const int left, const int right, const int ith) ; int partition (int * const array, const int转载 2012-03-19 22:05:16 · 1118 阅读 · 0 评论 -
<算法导论>第九章3 最坏情况线性时间的选择
最坏情况线性时间的选择(找第i小的元素):1.分组:每组最多5个元素(这里可以为5,7,...个元素);2.找中位数:在每组中找出中位数;3.中位数的中位数:找第2步中得到的中位数数组中的中位数;4.划分:将第3步得到的中位数作为划分元素划分数组,返回中位数的位置k;5.如果中位数是第i小的元素则返回,否则如果i代码的实现稍微有一点不同。因为我们用C++编码的时候小标从0开转载 2012-03-19 22:45:51 · 848 阅读 · 0 评论 -
基于consistent hashing实现Web Caching系统
基于 consistent hashing 实现 Web Caching 系统 David Karger, Alex Sherman , Andy Berkheimer, Bill Bogstad, Rizwan Dhanidina Ken Iwamoto, Brian Kim, Luke Matkins, Yoav Yerushalmi.MIT 计算机科学实验室邓辉 译转载 2012-03-20 15:21:41 · 813 阅读 · 0 评论 -
分布式处理之Consistent Hashing算法(C++实现)
大家知道在分布处理中,使用取余法来达到分布式处理是最方便、最快捷的方法,但是这种方法存在一系列的问题就是,那就是随着服务器的增加或減少,数据转移与命中率都会是件很头疼的事,在这里我们举个最简单的例子来说明这种方法带来的坏处。假设现有5台服务器来存放一部分数据,那么我们按取余的方法来得到服务器分布的位置, 按hash(key) % 5得到的值会在0-5之间,在这里我们假设为2,也就是说数据存放在转载 2012-03-20 18:52:32 · 960 阅读 · 0 评论 -
优先查找树介绍
优先查找树(priority search tree)适于解决动态的已知区间集合的区间查询问题。此问题间接地借助以下1.5维查询问题来解:已给平面土的点集5,对给定的x1,x2和y列举出S中所有包含在矩形R = [x1,x2]×[0,y] 中的点,如图所示。此处S是动态的,要求增删方便,这要求对不同的查询矩形R反复多次查询。 优先查找树的地规定以具体如下:(I)跟结点转载 2012-05-02 18:14:15 · 2373 阅读 · 0 评论 -
stl中list的sort算法实现
STL中有一个std::sort算法,但它是不支持std::list的,因为list不提供RandomIterator的支持,但list自己提供了sort算法,把list的元素按从小到大的方式来排序,代码长度到不长,但真是难以读懂,后来扣持了一下午终于搞明白了,贴个总结上来。list::sort的代码如下(sgi stl):template void list::sort()转载 2012-09-01 16:17:01 · 6837 阅读 · 4 评论 -
梯度下降法
回归(regression)、梯度下降(gradient descent)发表于332 天前 ⁄ 技术, 科研 ⁄ 评论数 3 ⁄ 被围观 1152 次+本文由LeftNotEasy所有,发布于http://leftnoteasy.cnblogs.com。如果转载,请注明出处,在未经作者同意下将本文用于商业用途,将追究其法律责任。前言:上次写过一篇关于贝叶斯概率论的数学转载 2013-02-03 00:29:25 · 544 阅读 · 0 评论 -
数字证书原理
文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理,最后演示使用makecert生成数字证书。如果发现文中有错误的地方,或者有什么地方说得不够清楚,欢迎指出! 1、基础知识 这部分内容主要解释一些概念和术语,最好是先理转载 2013-12-25 10:50:38 · 741 阅读 · 0 评论