算法
luo2010
这个作者很懒,什么都没留下…
展开
-
求n个数中前m个大的数的堆排序版本
堆排序就是先求出最大的数,然后求出次大的数,然后求出第三大的数,依次类推,而这个题只要求求出前m个大的数,所以用堆排序应该是效率比较高的。 heapsort(){ build_max_heap(int n); //建立最大堆 for (i=n;i>=2;i--) { exchange(a[1]...原创 2011-09-29 11:38:05 · 410 阅读 · 0 评论 -
google suggestion 实现(转)
前段时间 写了个 google suggestion之类 的东西。写之前在网上搜了一些实现的方法,大多数文章介绍了前台的实现,后台的实现 大多借助了数据库的查询 或者是 lucene的前缀搜索+单词搜索。但是这些后台的方法仅仅适合小数据量的搜索,不适合大数据量的搜索。因为 数据量大会造成响应时间相当慢的情况,作为搜索建议,是不可以忍受的。经过琢磨,研究了一下GOOGLE的表现。发现 1.如...原创 2012-05-09 12:38:13 · 251 阅读 · 0 评论 -
如何根据字典找出这个单词有多少个兄弟单词
问题:给定一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给定一个字典,用户输入一个单词,如何根据字典找出这个单词有多少个兄弟单词? 解法一: 使用hash_map和链表。 首先定义一个key,使得兄弟单词有相同的key,不是兄弟的单词有不同的key。例如,将单词按字母从小到大重新排序后作为其key,比如bad的key为abd,good的...原创 2012-05-09 15:55:08 · 135 阅读 · 0 评论 -
在一个文件中有10G个整数,乱序排列,要求找出中位数。内存限制为2G。
解法:首先假设是32位无符号整数。1. 读一遍10G个整数,把整数映射到256M个区段中,用一个64位无符号整数给每个相应区段记数。说明:整数范围是0 - 2^32 - 1,一共有4G种取值,映射到256M个区段,则每个区段有16(4G/256M = 16)种值,每16个值算一段, 0~15是第1段,16~31是第2段,……2^32-16 ~2^32-1是第256M段。一个64位无符号整数最大值是...原创 2012-05-19 21:23:04 · 386 阅读 · 0 评论 -
有N个大小不等的自然数(1--N),请将它们由小到大排序。
有N个大小不等的自然数(1--N),请将它们由小到大排序。 要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。 int cnt = 0;//辅助变量,不是算法组成部分,只是用于计数,实际应用可以不要void sort(int arr[], int n){ int t; /**//*临时变量:空间复杂度O(1)*/ //可以证明这个算法每次交换必然将一个数字正确安排到位,而且...原创 2012-05-21 11:44:19 · 409 阅读 · 0 评论 -
最长递增子序列
最长递增子序列问题的求解 最长递增子序列问题是一个很基本、较常见的小问题,但这个问题的求解方法却并不那么显而易见,需要较深入的思考和较好的算法素养才能得出良好的算法。由于这个问题能运用学过的基本的算法分析和设计的方法与思想,能够锻炼设计较复杂算法的思维,我对这个问题进行了较深入的分析思考,得出了几种复杂度不同算法,并给出了分析和证明。一, 最长递增子序列问题的描述设L=<...原创 2012-06-02 23:56:20 · 115 阅读 · 0 评论