中位数查找问题

Posted by 冰河 at 17:55 3 Responses » 16,989 Views
292011

1.有两个已排好序的数组A和B,长度均为n,找出这两个数组的中间元素。要求时间代价为O(logn)。

然后再论证平均时间复杂度(要不就是最坏时间复杂度)为O(logn)。

大牛给的解法:

Say the two arrays are sorted and increasing, namely A and B.
It is easy to find the median of each array in O(1) time.
Assume the median of array A is m and the median of array B is n.
Then,
1′ If m=n, then clearly the median after merging is also m, the algorithm holds.
2′ If m<n, then reserve the half of sequence A in which all numbers are greater than
m, also reserve the half of sequence B in which all numbers are smaller than n.
Run the algorithm on the two new arrays.
3′ If m>n, then reserve the half of sequence A in which all numbers are smaller than
m, also reserve the half of sequence B in which all numbers are larger than n.
Run the algorithm on the two new arrays.

Time complexity: O(logn)

2.查找一个数列的中位数

我们算法导论上定义的选择问题(selection problem):

输入:一个包含n个不同数的集合A和一个数i,1≤i≤n。

输出:元素x∈A,它恰大于A中其他的i-1个元素。

解决选择问题是使用以快速排序算法为模型的分治算法。中位数问题其实就是选择问题的特例,即i=n/2。算法思想如下:

1.抽取数组的第一个元素作为主元,用快速排序的思想进行一次调整,将比主元小的放在左边,比主元大的放在右边。

2.如果主元的索引等于数组长度的一半,那么就找到了。

3.如果主元的索引比数组长度的一半小的话,那么在主元到数组的结尾这个期间内找第(数组长度的一半-主元的索引)大的数。

4.否则在数组的开始到中间值的索引这段期间内找第(数组长度的一半大)大的数。

递归的调用上面的几步,就可以解决问题。复杂度是O(n)

292011

写一段程序,找出数组中第k大小的数,输出数所在的位置。

Continue reading »

百度2011校园招聘笔试题

Posted by 冰河 at 20:45 4 Responses » 11,284 Views
072011

研发工程师_核心研发方向(BJ)场

1.extern “C”{}的含义及解决的问题

2.说明两种设计模式及应用场景

3.TCP中time_wait是什么状态,有什么优缺点?

1.任务分配问题,任务之间有依赖关系。给出算法及时间、空间复杂度。

2.给英文分句。文章由大小写字母、逗号和点号组成。句子以点号结束,至少包含一个字母。要求写一段完整的程序,程序在完成功能的前提下尽可能简洁

某系统每天有1000亿条记录,存储url,ip,时间。

设计一个系统存储查询这些记录。实习记录,并能按以下要求查询:

(1)给出某时间段(精确到分钟),能查询某url的访问次数
(2)给出某时间段(精确到分钟),能查询某ip的访问次数

Young氏矩阵问题及算法

Posted by 冰河 at 17:48 No Responses » 7,134 Views
042011

百度某年的笔试题就考过Young氏矩阵的存在问题,所以这里把Young氏矩阵问题及算法贴一下

一个 m*n 的 Young 氏矩阵(Young tableau) 是一个 m*n 的矩阵,其中每一行的数据都从左到右排序,每一列的数据都从上到下排序.Young 氏矩阵中可能会有一些  ∞ 数据项,表示不存在的元素.所以,Young 氏矩阵可以用来存放 r<= mn 个有限的元素.
a).画一个包含{9,16,3,2,4,8,5,14,12} 的4*4 的 Young 氏矩阵.

b).给出一个在非空 m*n 的 Young  氏矩阵上实现 EXTRACT-MIN 算法,使其运行时间为O(m+n).

c).说明如何在O(m+n)时间内,将一个新元素手入到一个未满的 m*n Young 氏矩阵中.

d).给出一个时间复杂度为 O(n^3) 的对 n*n Young 氏矩阵排序的算法.

e).给出一个运行时间为O(m+n) 的算法,来决定一个给定的数是否存在于一个给定的 m*n  的 Young 氏矩阵当中. Continue reading »

libsvm函数库使用说明

Posted by 冰河 at 12:42 2 Responses » 15,425 Views
212010

本文大部分来自Felomeng的翻译,原文是《Felomeng翻译:libsvm2.88之函数库的使用》

2.88版本的README文件和libsvm3.0的README文件差不多,3.0版本的README见这里: libsvm3.0_README

Continue reading »

首先说交叉验证。
交叉验证(Cross validation)是一种评估统计分析、机器学习算法对独立于训练数据的数据集的泛化能力(generalize), 能够避免过拟合问题。
交叉验证一般要尽量满足:
1)训练集的比例要足够多,一般大于一半
2)训练集和测试集要均匀抽样

交叉验证主要分成以下几类:
Continue reading »

今天同学发来一道题,是关于信息检索方向的。仔细一问是他师兄参加搜狐网站的远程笔试题的一道大题。题目如下:

1. 背景:搜索引擎会根据用户搜索的关键字提供对应的广告,一般是通过统计学习实现(不限方法)。
2. 要求:附件中的文本文件已经分好类了,请从每个类别中随机挑选90%文件做为训练集,然后将剩余文件分类并输出分类的正确率。

Continue reading »

302010

今天收到邮件通知说提交的CIKM的论文有问题,提示如下:

Error Font Helvetica-Bold is not embedded (86x)
Error Font Helvetica is not embedded (404x)
Error Font Times-Bold is not embedded (246x)
Error Font Times-Roman is not embedded (427x)
Error Font Times-Italic is not embedded (125x)

我安装的是CTEX套装,生成pdf是按latex->bib->latex->latex->div2ps->ps2pdf的步骤。

去网上找了将近半天,众说纷纭。根据我自己的判断应该是Type1字体没有嵌入,然后被TrueTpye字体给替换了。具体说就是上面最后两步出问题了。网上的解决方案很多。我试了试都不管用,至少是不完全有用。折腾了半天,终于把问题解决了,我把我的解决方案贴出来,希望遇到同样问题的同学能看到。

首先是div2ps这步,必须确保type1字体被嵌入。我是按http://www.acm.org/sigs/publications/sigfaq#a14里的提示命令操作的:

dvips -t letter -Pdownload35 -o <file>.ps <file>.dvi

acm给的解释是This option 'forces' the embedding of all the fonts.
(Note: This option is not available in all dvips versions.)

有兴趣大家可以打开CTEXMiKTeXmiktexconfigupdmap.cfg看下,其实-Pdownload35是把下面的dvipsDownloadBase3临时设置成了true。

# dvipsDownloadBase35
#
# Should dvips (by default) download the standard 35 LaserWriter fonts
# with the document (then set dvipsDownloadBase35 true) or should these
# fonts be used from the ps interpreter / printer?
# Whatever the default is, the user can override it by specifying
# dvips -Pdownload35 … resp. dvips -Pbuiltin35 … to either download
# the LW35 fonts resp. use the build-in fonts.
#
# Valid settings are true / false:
dvipsDownloadBase35 false

当然上面的命令是不能点WinEdt上的dvi->ps按钮实现的,必须切换到命令行下执行。

接下来就是ps2pdf这一步了。网上说CTEX是集成Type1字体的。但是我点ps->pdf按钮生成的pdf还是不行。由于我对latex配置不熟,找不到在那配置,而且我也怕改了配置后改不回来,以后会导致未知错误。于是我按照网上说的用Acrobat Distiller把ps生成pdf。我的Acrobat Distiller版本是9,是装Adobe Acrobat 9 Pro自带的。其实用此方法的话说需要的字库就和CTEX没关系了。现在要做的就是在Windows上安装说需要的Type1字库了。我的pdf缺少Type1的Times字库和Helvetica字库。大家可以按自己系统的情况安装。我提供3个地址共参考:

http://www.ams.org/publications/amsfonts.html

http://www.aifont.com/post/?p=15

http://www.artec.cn/resource/font/2198-font.html

安装完字库用Acrobat Distiller把ps转化成pdf就行了。

Microsoft Learning to Rank Datasets

 

We release two large scale datasets for research on learning to rank: MSLR-WEB30k with more than 30,000 queries and a random sampling of it MSLR-WEB10K with 10,000 queries.

 

Dataset Descriptions

The datasets are machine learning data, in which queries and urls are represented by IDs. The datasets consist of feature vectors extracted from query-url pairs along with relevance judgment labels:

(1) The relevance judgments are obtained from a retired labeling set of a commercial web search engine (Microsoft Bing), which take 5 values from 0 (irrelevant) to 4 (perfectly relevant).

(2) The features are basically extracted by us, and are those widely used in the research community.

In the data files, each row corresponds to a query-url pair. The first column is relevance label of the pair, the second column is query id, and the following columns are features. The larger value the relevance label has, the more relevant the query-url pair is. A query-url pair is represented by a 136-dimensional feature vector. The details of features can be found here.

Below are two rows from MSLR-WEB10K dataset:
=============================================================
0 qid:1 1:3 2:0 3:2 4:2 … 135:0 136:0
2 qid:1 1:3 2:3 3:0 4:0 … 135:0 136:0
=============================================================

Dataset Partition

We have partitioned each dataset into five parts with about the same number of queries, denoted as S1, S2, S3, S4, and S5, for five-fold cross validation. In each fold, we propose using three parts for training, one part for validation, and the remaining part for test (see the following table). The training set is used to learn ranking models. The validation set is used to tune the hyper parameters of the learning algorithms, such as the number of iterations in RankBoost and the combination coefficient in the objective function of Ranking SVM. The test set is used to evaluate the performance of the learned ranking models.

Folds Training set Validation set Test set
Fold1 {S1,S2,S3} S4 S5
Fold2 {S2,S3,S4} S5 S1
Fold3 {S3,S4,S5} S1 S2   
Fold4 {S4,S5,S1} S2 S3
Fold5 {S5,S1,S2} S3 S4

 

The datasets can be downloaded at Microsoft Research website.

数据挖掘十大经典算法

Posted by 冰河 at 19:48 No Responses » 4,519 Views
192010

国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 2006年12月评选出了数据挖掘领域的十大经典算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART.

不仅仅是选中的十大算法,其实参加评选的18种算法,实际上随便拿出一种来都可以称得上是经典算法,它们在数据挖掘领域都产生了极为深远的影 响。


1. C4.5

C4.5 算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法.  C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进:

1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;

2) 在树构造过程中进行剪枝;

3) 能够完成对连续属性的离散化处理;

4) 能够对不完整数据进行处理。

C4.5算法有如下优点:产生的分类规则易于理解,准确率 较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。


2. The k-means algorithm 即K-Means算法

k-means algorithm算法是一个聚类算法,把n的对象根据他们的属性分为k个分割,k < n。它与处理混合正态分布的最大期望算法很相似,因为他们都试图找到数据中自然聚类的中心。它假设对象属性来自于空间向量,并且目标是使各个群组内部的均 方误差总和最小。


3. Support vector machines

支持向量机,英文为Support Vector Machine,简称SV机(论文中一般简称SVM)。它是一种?督式??的方法,它广泛的应用于统计分类以及回归分析中。支持向量机将向量映射到一个更 高维的空间里,在这个空间里建立有一个最大间隔超平面。在分开数据的超平面的两边建有两个互相平行的超平面。分隔超平面使两个平行超平面的距离最大化。假 定平行超平面间的距离或差距越大,分类器的总误差越小。一个极好的指南是C.J.C Burges的《模式识别支持向量机指南》。van der Walt 和 Barnard 将支持向量机和其他分类器进行了比较。

4. The Apriori algorithm

Apriori算法是一种最有影响的挖掘布尔关联规 则频繁项集的算法。其核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。在这里,所有支持度大于最小支持度的项集称 为频繁项集,简称频集。


5. 最大期望(EM)算法

在统计计算中,最大期望(EM,Expectation–Maximization)算法是在概率(probabilistic) 模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variabl)。最大期望经常用在机器学习和计算机视觉的数据集聚(Data Clustering)领域。

6. PageRank

PageRank是Google算法的重 要内容。2001年9月被授予美国专利,专利人是Google创始人之一拉里•佩奇(Larry Page)。因此,PageRank里的page不是指网页,而是指佩奇,即这个等级方法是以佩奇来命名的。

PageRank根据网站的外部链接和内部链接的数量和质量俩衡量网站的价值。PageRank背后的概念是,每个到页面的链接都是 对该页面的一次投票,被链接的越多,就意味着被其他网站投票越多。这个就是所谓的“链接流行度”——衡量多少人愿意将他们的网站和你的网站挂钩。 PageRank这个概念引自学术中一篇论文的被引述的频度——即被别人引述的次数越多,一般判断这篇论文的权威性就越高。

7. AdaBoost

Adaboost是一种迭代算法,其核心 思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器 (强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权 值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。

8. kNN: k-nearest neighbor classification

K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相 似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

9. Naive Bayes

在众多的分类模型中,应用最为广泛的两种分类模型是决策树模型 (Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBC)。 朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简 单。理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往 往是不成立的,这给NBC模型的正确分类带来了一定影响。在属性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型。而在属性相 关性较小时,NBC模型的性能最为良好。


10. CART: 分类与回归树

CART, Classification and Regression Trees。 在分类树下面有两个关键的思想。第一个是关于递归地划分自变量空间的想法;第二个想法是用验证数据进行剪枝。

© 2009 - 2018 冰河的博客