随笔分类 - 算法
摘要:1、从300万字符串中找到最热门的10条搜索的输入信息是一个字符串,统计300万输入信息中的最热门的前10条,我们每次输入的一个字符串为不超过255byte,内存使用只有1G。请描述思想,写出算法(c语言),空间和时间复杂度。255字节*300万=7,5500,0000字节=755,000K=755M=0.75G所以完全可以放入内存处理,建立一个字符串的Hash数组,然后遍历所有字符串,相应的加一处理,然后排序即可,算法负责度极为O(n)2、如何找出字典中的兄弟单词。给定一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给定一个字典,用户输入一个单词,
阅读全文
摘要:双十一已经过去了,闲暇时间收集了一些算法试题,分享一下!1、实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去。例子:func(7) = 4,可以证明最少需要4次运算n = 7n-1 6n/2 3n-1 2n/2 1要求:实现函数(实现尽可能高效) int func(unsign int n);n为输入,返回最小的运算次数。给出思路(文字描述),完成代码,并分析你算法的时间复杂度。 $y) return $y+1; else return $x+1;}echo func(7...
阅读全文
摘要:摘要本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用。首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如何解决此问题;接下来会对这个算法进行相对详细的描述,并讨论一些如虚拟节点等与此算法应用相关的话题。分布式缓存问题假设我们有一个网站,最近发现随着流量增加,服务器压力越来越大,之前直接读写数据库的方式不太给力了,于是我们想引入Memcached作为缓存机制。现在我们一共有三台机器可以作为Memcached服务器,如下图所示。很显然,最简单的策略是将每一次Memcached请求随机发送到一台Mem
阅读全文
摘要:选择排序function select_2($_array){ for($i=0;$i<count($_array)-1;$i++) { $key = $i; for($j=$i+1;$j<count($_array);$j++) { if ($_array[$j]<$_array[$key]) { $key = $j; } } $tmp = $_array[$key]; $_array[$ke...
阅读全文
摘要:前两天看得是快速排序和冒泡排序,今天学习一下插入排序,可以说插入排序比前两种方便很多。/** * 插入排序 */function insert_sort2($_array){ for($i=0;$i<count($_array);$i++) { $key = $_array[$i]; for($j=$i;$j>0;$j--) { if ($key<$_array[$j-1]) { $_array[$j] = $_array[$j-1]; ...
阅读全文
摘要:上篇文章介绍了一下基本的冒泡排序,今天介绍一下快速排序。function QuickSort($_array){ if (count($_array)<=1) { return $_array; } $key = $_array[0]; $left_array = $right_array = array(); for ($i=1;$i<count($_array);$i++) { if ($_array[$i] > $key) { $right_array[]...
阅读全文
摘要:最近发现在网络上冒泡排序的程序不少,但是介绍基本原理的文章很少能找到,所以整理了一下,供大家参考。二、冒泡排序 性能分析 它是冒泡排序的改良,但它同样是一个对数据有序性非常敏感的排序算法,只适合于数据基本有序的排序,时间复杂度与冒泡排序相同。 还有一种继续改良的算法(一次下沉再一次上浮),最优情况和最坏情况同样与冒泡排序差不多,但是一般情况下它要好过冒泡排序,它一次下沉,再一次上浮,这样避免了因一个数的逆序,而造成巨大的比较。如(2,3,4,…,n-1,n,1),用冒泡排序需要n(n-1)/2次比较,而此排序只要3轮,共比较(n-1)+(n-2)+(n-3)次,第一轮1将上移一位,第...
阅读全文
摘要:/**calc_hash_tbl 计算Hash子表编号输入: $u ID号 $n 子表数输出: 两位十六进制子表编号**/function calc_hash_tbl($u, $n = 16){ $h = sprintf("%u", crc32($u)); $h1 = intval($h / $n); $h2 = $h1 % $n; $h3 = base_convert($h2, 10, 16); $h4 = sprintf("%02s", $h3); return $h4;}
阅读全文