随笔分类 - 经典算法
摘要:类似基于投票的热门计数算法普遍应用在热门文章,热门评论等场景中, 典型的比如网易和今日头条的评论区,国外比如Hacker News和Reddit的主题排序。 一.Hacker News的排序算法 Hacker News是一个主题社区,用户可以为主题投票,根据得票数,系统自动统计出热门文章排行榜。 同
阅读全文
摘要:一致性哈希算法(Consistent Hashing Algorithm)是一种分布式算法,由MIT的Karger及其合作者提出,现在这一思想已经扩展到其它领域。1997年发表的学术论文中介绍了“一致性哈希”如何应用于用户易变的分布式Web服务中。一致性哈希可用于实现健壮缓存来减少大型Web应用中系
阅读全文
摘要:一、查找算法 常见的查找算法大概有顺序查找、二分查找、二叉排序树查找、哈希表法(散列表)、分块查找等,下面简单了解一下其他几种查找算法。 1.顺序查找 也就是暴力方法,按顺序比较每个元素,直到找到关键字为止。条件:无序或有序数据,时间复杂度:O(n) 2.二叉排序树查找 二叉排序树的性质:1. 若它
阅读全文
摘要:手摇法指通过三次reverse操作,实现数组的rotation: 1.如何实现字符串倒置 2.字符串旋转和手摇算法 《编程珠玑》里的一个题目:请将一个具有n个元素的一维向量x向左旋转i个位置。例如,假设n=8,i=3,那么向量abcdefgh旋转之后得到向量defghabc。 手摇算法还可以用来优化
阅读全文
摘要:B+、B- Tree(mysql,oracle,mongodb) 主要用在关系数据库的索引中,如oracle,mysql innodb;mongodb中的索引也是B-树实现的;还有HBase中HFile中的DataBlock的索引等等。 动态查找树主要有:二叉查找树(Binary Search Tr
阅读全文
摘要:一、40亿数据排序问题 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数(在文件中至少缺失这样一个数——为什么?)。在具有足够内存的情况下,如何解决该问题?(编程珠玑) 二、应用BitMap存储大数据 数据的存在性可以使用bit位上的1或0来表示;一个bit具有
阅读全文
摘要:从一个问题引出 如何随机从n个对象中(这n个对象是按序排列的,但是在此之前你是不知道n的值的)随机选择一个对象?具体来说,如何在实现不知道文本文件行数的情况下读取该文件,从中随机选择并输出一行? 这是《编程珠玑》中的一个习题,如果我们知道n的值,那么问题就可以简单的用一个大随机数rand()%n得到
阅读全文
摘要:归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序在众多排序算法中既是稳定排序,效率也比较高,同时,归并排序不仅可以用于内排序,还可以用于外排序。 1
阅读全文
摘要:一、字典树的概念 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。与二叉查找树不同,Trie树的键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串
阅读全文
摘要:1. 问题描述 在大规模数据处理中,常遇到的一类问题是,在海量数据中找出出现频率最高的前K个数,或者从海量数据中找出最大的前K个数,这类问题通常称为“top K”问题,如:在搜索引擎中,统计搜索最热门的10个查询词;在歌曲库中统计下载率最高的前10首歌等等。 2. 当前解决方案 针对top k类问题
阅读全文
摘要:TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用。 采用客户/服务器模式,其程序编写步骤如下: 1.Socket系统调用 为了进行网络I/O,服务器和客户机两端的UNIX进程要做的第一件事是调用socket()系统调用,建立软插座,指明合适的通讯协议。格式为:
阅读全文