
算法
文章平均质量分 87
huagong_adu
感兴趣方向机器学习数据挖掘推荐系统搜索希望可以和同道中人多多交流
展开
-
随机数的生成
问题描述: 现要求产生 0~n-1 范围内的 m 个随机整数的有序列表,且不允许重复,m 考虑到 n 的值可能很大,而通常 C/C++ 提供的随机数产生器所能返回的随机数在 [0,RAND_MAX],其中,RAND_MAX 为 0x7FFF。也就是说只有 15 位的随机性。因此,我们需要要有自己的随机数产生器,以便能够返回更多位数的随机数,通常为 30 位转载 2010-05-09 20:06:00 · 1994 阅读 · 1 评论 -
频繁项集挖掘算法之FPGrowth
背景: 频繁项集挖掘算法用于挖掘经常一起出现的item集合(称为频繁项集),通过挖掘出这些频繁项集,当在一个事务中出现频繁项集的其中一个item,则可以把该频繁项集的其他item作为推荐。比如经典的购物篮分析中啤酒、尿布故事,啤酒和尿布经常在用户的购物篮中一起出现,通过挖掘出啤酒、尿布这个啤酒项集,则当一个用户买了啤酒的时候可以为他推荐尿布,这样用户购买的可能性会比较大,从而达到原创 2014-01-01 22:30:23 · 49664 阅读 · 7 评论 -
Bloom Filter的基本原理和变种
学习一个东西首先要知道这个东西是什么,可以做什么,接着再了解这个东西有什么好处和优势,然后再学习他的工作原理。下面我们分别从这三点简单介绍一下bloom filter,以及和他的变种。What:在允许一定的错误率的情况下,用于判断一个元素是否属于一个集合,Bloom Filter可能会将一个不属于集合的元素误判为属于这个集合,即false positive。可以应用于检查一个URL是否已经原创 2013-12-14 18:21:02 · 3341 阅读 · 0 评论 -
动态规划——装配线调度问题
一、问题描述 装配线调度问题如下: Colonel汽车公司在有两条装配线的工厂内生产汽车,一个汽车底盘在进入每一条装配线后,在每个装配站会在汽车底盘上安装不同的部件,最后完成的汽车从装配线的末端离开。如下图1所示。图1 装配线示意图 每一条装配线上有n个装配站,编号为j=1,2,...,n,原创 2012-03-19 15:03:01 · 6266 阅读 · 2 评论 -
插入查找元素效率问题——《编程珠玑》读书笔记
这两天看了第13章,看了好长一段时间,主要花在理解和编程实现上面,感觉自己的理解能力还有待提高。 这一章主要讲如何实现一个有序集合(Set),该集合插入元素时不能插入重复元素,每次插入完后集合中元素的排列是有序的。书上一共使用了6种数据结构实现这个集合:STL中的set(红黑数)、数组、链表、二分查找树、位向量、桶,使用了3种优化方案:哨兵(标记元素)、指针的指针(用于实现递归向原创 2012-07-09 21:59:02 · 2372 阅读 · 0 评论 -
位图排序及其扩展应用——《编程珠玑》读书笔记
一、基本的位图排序 问题1:输入一个包含n=100万个正整数的文件,每个正整数都小于N=1000万,而且这100万个正整数没有重复,对这个文件的数字进行排序,保存结果到文件中。要求占用尽可能小的内存,速度尽可能快。 分析解决:如果用一个int保存一个正整数,一个int为4 Byte,100万个数要用400万 Byte,约为4M。如果用快排,时间复杂度为O(n原创 2012-06-03 16:49:36 · 3078 阅读 · 0 评论 -
抽样问题——《编程珠玑》读书笔记
问题:输入两个整数m和n,并且m 方法一: Knuth著作《Seminumerical Algorithms》中提出的方法,顺序遍历n个数,通过随机测试条件的元素被选择。 以一个例子来解释所说的随机测试条件,比如m=2,n=5。第一个元素0被选择的概率是2/5;第二个元素1被选择的概率取决于第一个元素有没有被选择,如果0被选择,则1被选择的概率原创 2012-05-30 20:40:19 · 3311 阅读 · 0 评论 -
洗牌程序
之前在写抽样问题——《编程珠玑》读书笔记这篇文章的时候提到将一个数列进行重新排列,目的是弄乱原有数据的排列,相当于洗牌,这篇文章主要讲讲这个洗牌程序的实现。 一、Fisher–Yates Shuffle 最早提出这个洗牌方法的是 Ronald A. Fisher 和 Frank Yates,即 Fisher–Yates Shuffle,其基本思想就是从原始数原创 2012-06-01 00:47:14 · 8950 阅读 · 1 评论 -
蓄水池抽样——《编程珠玑》读书笔记
问题:如何随机从n个对象中选择一个对象,这n个对象是按序排列的,但是在此之前你是不知道n的值的。 思路:如果我们知道n的值,那么问题就可以简单的用一个大随机数rand()%n得到一个确切的随机位置,那么该位置的对象就是所求的对象,选中的概率是1/n。 但现在我们并不知道n的值,这个问题便抽象为蓄水池抽样问题,即从一个包含n个对象的列表S中随机选取k个对象,n为一原创 2012-05-31 17:18:15 · 38593 阅读 · 10 评论 -
一道笔试题——由数组中除了一个数之外的其他数的乘积生成另一个数组
一、题目 对于一个数组A[N],要求生成一个新的数组B[N]。对数组B的要求是B[i] = A[0] * A[1]…*A[i - 1] * A[i + 1]*…*A[N],也就是不包括A[i]的剩余元素之积。 二、要求 1. 不允许使用除法; 2. O(1)空间复杂度和O(n)时间复杂度; 3. 除遍历计数器原创 2012-04-13 15:50:36 · 3029 阅读 · 0 评论 -
位操作基础篇之位操作全面总结
位操作篇共分为基础篇和提高篇,基础篇主要对位操作进行全面总结,帮助大家梳理知识。提高篇则针对各大IT公司如微软、腾讯、百度、360等公司的笔试面试题作详细的解答,使大家能熟练应对在笔试面试中位操作题目。 下面就先来对位操作作个全面总结,欢迎大家补充。在计算机中所有数据都是以二进制的形式储存的。位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。转载 2012-03-20 09:28:51 · 1865 阅读 · 0 评论 -
找最小的K个数
今天在优快云无意中看到July一篇号称《当今世界最为经典的十大算法》的博文,感觉这文章名字挺霸气,于是进去瞅了一眼。看到其中有一个叫做BFPRT的算法,据说可以最坏情况下也能以O(N)复杂度找到数组中的第K大元素。博文里有链接到详细解释这个算法的另外一篇博文,于是又点进去,准备看看这算法是如何神奇,居然可以如此高效!文章是以这样一个问题开始的:如何在一堆数据中找出最小的K个数。随便想了一原创 2011-10-24 23:51:45 · 8316 阅读 · 4 评论 -
面试题之10亿正整数问题--完整解答
关于这个问题,经过这么久的讨论,两篇文章及大家的回复,已经比较很清楚了。这里就来完整的整理一下解答。其实本来已经整理得差不多了,不过很不幸,电脑忽然罢工,怎么也启动不了,然后又感冒了,所以一直到现在才开始做这个解答。好了,不说这个了。下面进入正题。这个转载 2010-05-10 13:45:00 · 2015 阅读 · 0 评论 -
位图算法的应用
位图的应用编程珠玑 Chapter1位图或位向量图作为一个集合,表示的这样的一个数据结构: 用字符串 0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 表示集合 {1,2,3,5,8,13}. 位图的应用需转载 2010-05-08 16:10:00 · 6144 阅读 · 0 评论 -
NSGA-2学习笔记
NSGA2主要是对NSGA算法的改进。NSGA是N. Srinivas 和 K. Deb在1995年发表的一篇名为《Multiobjective function optimization using nondominated sorting genetic algorithms转载 2010-04-17 21:05:00 · 3019 阅读 · 1 评论 -
位运算详解
【 在网上看了一下位运算方面的内容,整合了两篇文章的内容,也加进了自己的一点理解原文链接:1.http://www.rupeng.com/forum/thread-2142-1-1.html2.http://peirenlei.javaeye.com/blog/305转载 2010-05-08 15:18:00 · 1569 阅读 · 0 评论 -
史上最全的搜索下拉提示用户交互研究——读《An Eye-tracking Study of User Interactions with Query Auto Completion》
搜索下拉提示(Query Auto Completion,简称QAC)现在几乎是每个搜索引擎必备的基本功能,作用是在用户在搜索框输入查询词的过程中,给用户展示一系列搜索查询query供用户选择,可以方便用户输入、缩短用户搜索时间、提高用户搜索体验。在这方面的研究已经有很多,如基于上下文、基于时间序列等预测query的热度、个性化排序等,但关于用户如何与搜索下拉提示交互的研究目前还是一个空白。微软的Katja Hofmann前几天刚刚填补了这一空白,她在CIKM 2014会议上发表了一篇paper——An E原创 2014-11-09 18:20:58 · 3890 阅读 · 0 评论