关闭

五分钟理解一致性哈希算法(consistent hashing)

转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179     一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到...
阅读(90) 评论(0)

1,2,3…n*n 的数字按照顺时针螺旋的形式打印成矩阵(递归)

题目:1,2,3…n*n 的数字按照顺时针螺旋的形式打印成矩阵,如下: 输入数字2,则程序输出: 1 2 4 3 输入数字3,则程序输出: 1 2 3 8 9 4 7 6 5 输入数字4, 则程序输出: 1     2    3    4 12  13  14  5 11  16  15  6 10   9    8   7 此题我的解题方法是递归,递归函数的作用...
阅读(189) 评论(0)

漫画算法:辗转相除法是什么鬼?

http://blog.jobbole.com/106315/ 小灰的思路十分简单。他使用暴力枚举的方法,试图寻找到一个合适的整数 i,看看这个整数能否被两个整型参数numberA和numberB同时整除。 这个整数 i 从2开始循环累加,一直累加到 numberA 和 numberB 中较小参数的一半为止。循环结束后,上一次寻找到的能够被两数整除的最大 i 值,就是两数的最大公约...
阅读(141) 评论(0)

辗转相除法证明+最小公倍数证明+其他相关证明

辗转相除算法的简介   在数论中,辗转相除法(国际上一般称为Euclidean Algorithm 或 Euclid's Algorithm,即欧几里得算法)是一种求任意两个欧几里得环(Euclidean Domain)中的单位(如:整数)的最大公约数的算法。这个算法的一个重要特点就是其不需要通过分解因式来求取最大公约数。辗转相除法正因为其易操作性与易实现性而成为了计算机编程中的一个重要...
阅读(94) 评论(0)

Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等

本文就是介绍一些常见的排序算法。排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序、选择排序、冒泡排序、快速排序(重点)、堆排序、归并排序等等。看下图: 给定数组:int data[] = {9,2,7,19,100,97,63,208,55,78} 一、直接插入排序(内部排...
阅读(178) 评论(0)

Twitter的分布式自增ID算法snowflake (Java版)

概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。 有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cass...
阅读(583) 评论(0)

冒泡排序最佳情况的时间复杂度,为什么是O(n)

转自:http://www.cnblogs.com/melon-h/archive/2012/09/20/2694941.html 我在许多书本上看到冒泡排序的最佳时间复杂度是O(n),即是在序列本来就是正序的情况下。 但我一直不明白这是怎么算出来的,因此通过阅读《算法导论-第2版》的2.2节,使用对插入排序最佳时间复杂度推算的方法,来计算冒泡排序的复杂度。 1. 《算法导论》2.2中对插入...
阅读(394) 评论(0)

Heapsort 堆排序算法详解(Java实现)

Heapsort (堆排序)是最经典的排序算法之一,在google或者百度中搜一下可以搜到很多非常详细的解析。同样好的排序算法还有quicksort(快速排序)和merge sort(归并排序),选择对这个算法进行分析主要是因为它用到了一个非常有意思的算法技巧:数据结构 - 堆。而且堆排其实是一个看起来复杂其实并不复杂的排序算法,个人认为heapsort在机器学习中也有重要作用。这里重新详解下关于...
阅读(416) 评论(0)

Timing Wheel 定时轮算法

最近自己在写一个网络服务程序时需要管理大量客户端连接的,其中每个客户端连接都需要管理它的 timeout 时间。 通常连接的超时管理一般设置为30~60秒不等,并不需要太精确的时间控制。 另外由于服务端管理着多达数万到数十万不等的连接数,因此我们没法为每个连接使用一个Timer,那样太消耗资源不现实。 最早面临类似问题的应该是在操作系统和网络协议栈的实现中,以TCP协...
阅读(173) 评论(0)

程序员应该了解的查找(java实现)

上一星期写了关于排序的几篇博文,得到很多道友的支持,在这里非常感谢。    相比较排序来说,今天所说的查找就简单多了,今天我们先来说: 1, 顺序查找 2, 折半查找   一、顺序查找的基本思想: 从表的一端开始,顺序扫描表,依次将扫描到的结点关键字和给定值(假定为a)相比较,若当前结点关键字与a相等,则查找成功;若扫描结束后,仍未找到关键字等于a的结点,则查找...
阅读(208) 评论(0)

【转】取模(mod)与取余(rem)的区别——Matlab学习笔记

http://www.madio.net/forum-viewthread-tid-91108-extra-page%3D1%26filter%3Dlastpost%26dateline%3D7948800-ordertype-1.html   昨天在学习Matlab的数学函数时,教程中提到取模(mod)与取余(rem)是不同的,今天在网上具体查了一下: 通常取模运算也叫取余...
阅读(1106) 评论(0)

数据工程师必知算法:蓄水池抽样

摘要: 引言:众所周知,想要面试一个统计学家和软件工程师的合体——数据工程师——是件很难的事情。我在面试中常使用的方法是:提出即需要算法设计,又需要一些概率论知识的问题,来考察面试者的功底。         英文原文:hadoop-stratified-randosampling-algorithm         译者:bruce-accumulate 译文链接...
阅读(396) 评论(0)

搜狗笔试题目:4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法

4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法。 给定一个m*n的格子或棋盘,问从左下角走到右上角的走法总数(每次只能向右或向上移动一个方格边长的距离) 解答: 把棋盘看做二维坐标, 设f(m,n)代表从坐标(0,0)到坐标(m,n)的移动方法,则 f(m,n)=f(m-1,n)+f(m,n-1) 初始为f(0,0)=0,f(0,1)...
阅读(1069) 评论(0)

基于用户投票的排名算法(五):威尔逊区间

迄今为止,这个系列都在讨论,如何给出"某个时段"的排名,比如"过去24小时最热门的文章"。 但是,很多场合需要的是"所有时段"的排名,比如"最受用户好评的产品"。 这时,时间因素就不需要考虑了。这个系列的最后两篇,就研究不考虑时间因素的情况下,如何给出排名。 一种常见的错误算法是:   得分 = 赞成票 - 反对票 假定有两个项目,项目A是60张赞...
阅读(431) 评论(0)

Java排序算法(十二):总结

前面讲了10种基本的排序算法,现在来作下总结,基于下面几个方面来比较各个排序算法的优劣: 时间复杂度,空间复杂度,稳定性,适用场景 排序算法 时间复杂度 空间复杂度 稳定性 适用场景 直接选择排序 O(n^2) O(1) 不稳定 时间效率不高,但是空间效率很高,算法实现比较简单 堆排序 O(nlogn),底数为2 O(1) 不稳定 时...
阅读(390) 评论(0)
22条 共2页1 2 下一页 尾页
    个人资料
    • 访问:6996197次
    • 积分:61371
    • 等级:
    • 排名:第34名
    • 原创:250篇
    • 转载:2617篇
    • 译文:3篇
    • 评论:663条
    文章分类
    最新评论