上一页 1 2 3 4 5 6 7 8 9 ··· 15 下一页

2012年8月17日

编程之美:求数组的子数组之和的最大值

摘要: 1.问题描述一个有N个整数元素的一维数组( A[0], A[1], ... , A[n-2], A[n-1]),子数组之和的最大值是什么?(要求子数组的元素是连续的)例子:有数组( -2, 5, 3, -6, 4, -8, 6),则其子数组之和的最大值为8,其对应的数组为(5,3)2.分析与解法解法一:采用直接法,记Sum[i...j],为数组A中从第i到第j之间所有数之和,算出所有Sum,取其最大,代码如下,时间复杂度O(N2):int maxSum1(int *A, int n){ int max = -1; int i, j, sum; for(i = 0; i... 阅读全文

posted @ 2012-08-17 13:28 as_ 阅读(4757) 评论(3) 推荐(0) 编辑

编程之美:阶乘数计算

摘要: 1.问题描述1).给定一个整数N,那么N的阶乘N!末尾有多少个0?例如:N=0,N!=3628800,N!的末尾有两个0.2).求N!的二进制表示中最低1的位置2.分析与解法首先考虑,如果N! = K*10M,且K不能被10整除,那么N!末尾有M个0.再考虑对N!质因分解,N! = (2X)*(3Y)*(5Z)...,由于10=2*5,所以M只跟X和Z有关,每一对2和5都可以得到一个10,于是M=min(X,Z)。不难看出X大于等于Z,因为在N!分解的数种明显2出现的频率要高于5,所以把公式简化为M=Z。根据上面的分析,有对于问题1解法一:要计算Z,最直接的方法,就是计算i(i =1, 2, 阅读全文

posted @ 2012-08-17 09:58 as_ 阅读(659) 评论(0) 推荐(0) 编辑

2012年8月16日

Hadoop 2.0 代码:Client端代码简要分析

摘要: 1.概览 以下主要叙述Hadoop如何将用户写好的MR程序,以Job的形式提交 主要涉及的四个java类文件:hadoop-mapreduce-client-core下的包org.apache.hadoop.mapreduce: Job.java、JobSubmitter.javahadoop-mapreduce-client-jobclient下的包org.apache.hadoop.mapred: YARNRunner.java、ResourceMgrDelegate.java2.代码分析与执行逻辑过程1).客户运行写好类下下面的程序,这里省去map和reduce的函数的实现:Job jo 阅读全文

posted @ 2012-08-16 18:15 as_ 阅读(4577) 评论(0) 推荐(0) 编辑

编程之美:求二进制中1的个数

摘要: 1.问题描述实现一个函数,输入一个无符号整数,输出该数二进制中的1的个数。例如把9表示成二进制是1001,有2位是1,因此如果输入9,该函数输出22.分析与解法解法1:利用十进制和二进制相互转化的规则,依次除余操作的结果是否为1 代码如下:int Count1(unsigned int v){ int num = 0; while(v) { if(v % 2 == 1) { num++; } v = v/2; } return num;}解法2:向右移位操... 阅读全文

posted @ 2012-08-16 14:45 as_ 阅读(4775) 评论(1) 推荐(1) 编辑

2012年8月15日

编程珠玑:旋转交换技巧

摘要: 1.问题描述将一个n元一维向量向左旋转i个位置。例如,当n=8且i=3时,向量abcdefgh旋转为defghabc。简单的代码使用一个n元的中间向量在n步就能够完成该工作,你能否仅使用数十个额外字节的存储空间,正比于n的时间内完成向量旋转?2.解决思路旋转向量x其实就是交换向量ab的两段,得到向量ba。这里a代表x中的前i个元素。假设a比b短,将b分为bl和br,使得br具有与a相同的长度。交换a和br,也就是将ablbr 。序列a此时已处于其最终的位置,因此现在就集中到交换b的两部分。由于新问题与原来的问题具有相同的形式,我们可以递归地解决之。编程珠玑提供了更简单使用的方法,我们将问题看做 阅读全文

posted @ 2012-08-15 18:11 as_ 阅读(876) 评论(0) 推荐(0) 编辑

编程珠玑:取样问题

摘要: 1.问题描述程序的输入包含两个整数m和n,其中m<n。输出是0~n-1范围内m个随机整数的有序列表,不允许重复。从概率的角度说,我们希望得到没有重复的有序选择,其中每个选择出现的概率相等。2.解决思路与代码实现编程珠玑上给出了四个函数1).genknuth():算法依次考虑整数0,1,2,...,n-1,并通过一个适当的随机测试对每个整数进行选择。通过按序访问整数,可以保证输出结果是有序的代码C++实现:void genknuth(int m, int n) { for(int i = 0;i < 0;i++) { if((bigrand() % (n... 阅读全文

posted @ 2012-08-15 16:00 as_ 阅读(673) 评论(0) 推荐(0) 编辑

编程珠玑:用后缀数组寻找最长重复字符串

摘要: 1.基本概念子串:字符串 S 的子串 r[i..j] , i ≤ j ,表示 r 串中从 i 到 j 这一段,就是顺次排列 r[i],r[i+1],...,r[j] 形成的字符串。后缀:后缀是指从某个位置 i 开始到整个串末尾结束的一个特殊子串。字符串 r 的从 第 i 个字 符 开 始 的 后 缀 表 示 为 Suffix(i) ,也 就 是Suffix(i)=r[i..len(r)] 。后缀数组:后缀数组 SA 是一个一维数组,它保存 1..n 的某个排列 SA[1] ,SA[2] , …… , SA[n] ,并且保证 Suffix(SA[i]) < Suffix(SA[i+1]) 阅读全文

posted @ 2012-08-15 14:19 as_ 阅读(3140) 评论(1) 推荐(0) 编辑

2012年8月14日

编程珠玑:单词频率最高选取

摘要: 问题描述:对一个输入文本中的每个单词的出现次数统计,并选取出现频率最大的10个单词首先用C++实现,着重注意STL的map,vector排序用法,这里与编程珠玑的代码不同。不知道何故,编程珠玑上的代码, 输入之后得到的结果是按照单词排序的,而不是按照次数排序,这里做了修改C++实现代码:#include <iostream> #include <stdlib.h> #include <string> #include <map> #include <vector> #include <algorithm> using na 阅读全文

posted @ 2012-08-14 19:49 as_ 阅读(565) 评论(0) 推荐(1) 编辑

编程珠玑:变位词程序的实现

摘要: 这个程序的实现有助于压缩key的大小,使查找效率更高1.问题描述 给定一本英语单词词典,请找出所有的变位词集。所谓的变位词是指,组成各个单词的字母完全相同,只是字母排列的顺序不同。2.解决思路编程珠玑的变位词程序要按照三个步骤来执行,其中前一个步骤程序的输出作为下一个步骤程序的输入:第一:程序标识单词,第二:程序排序标识后的文件,第三:程序将这些单词压缩为每个变位词类一行的形式下面是编程珠玑的举例,仅有6个单词的字典的处理过程由以上可看出需要三个程序的处理1).sign程序:假设输入单词的长度不超过100,对每个输入的单词依照字母进行排序,将结果输入这个单词所对应的”签名“2).sort程序: 阅读全文

posted @ 2012-08-14 15:42 as_ 阅读(3812) 评论(1) 推荐(1) 编辑

编程珠玑:位图法排序

摘要: 问题描述输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=107。如果在输入文件中有任何正数重复出现就是致命错误。没有其他数据与该正数相关联。输出:按升序排列的输入正数的列表。约束:最多有1MB的内存空间可用,有充足的磁盘存储空间可用。运行时间最多几分钟,运行时间为10秒就不需要进一步优化。程序设计与实现概要:应用位图或位向量表示集合。可用一个10位长的字符串来表示一个所有元素都小于10的简单的非负整数集合,例如,可以用如下字符串表示集合{1,2,4,5,8}:0 1 1 1 0 1 0 0 1 0 0代表集合中数值的位都置为1,其他左所有的位置为0.编程珠玑当中建议是一年个一个具有 阅读全文

posted @ 2012-08-14 14:06 as_ 阅读(8847) 评论(1) 推荐(1) 编辑

上一页 1 2 3 4 5 6 7 8 9 ··· 15 下一页

导航