编程珠玑 习题 十二章

原创 2012年03月27日 22:09:29

注:以下皆为个人理解,非标准答案

12.5.1:

  • bigrandrand函数随机产生15位,那么用两次rand函数再拼接起来就形成了30个随机位
  • randint(l,u)将rand出的数映射到l,u 之间即可,一个实现方法是mod(u-l)+l 

12.5.8:

  • [0..n-1] 中选取 个数并乱序输出先用12.1中的算法产生选出的m个数,然后进行洗牌算法(12.3中所说的‘弄乱)并输出
  • 允许重复,要生成顺序列表每选出一个数后,还是从头遍历数组进行下一次选择;最后排序输出
  • 允许重复,乱序输出:同上,只是省略了排序

12.5.9:

  • 作者坚持要用set的方法并且最多只用m次rand函数:那么必须要避免取到重复数的情况。可以先产生一个数组a[0..n-1]a[i]=i;第j 次循环index = rand() mod (n-j+1),然后取 a[index]  放入set,并用 a[n-j] 替换掉 a[index]。可能看上去比较复杂,思想就是每次从干净的数中取一个放入set,并将该数移除,这样以后就不会取到重复的数;上述方法就是该思想的一个实现

12.5.10:

  • n个对象按序排列,事先不知道n,如何随机输出一个对象:此题的意思我的理解是顺序的读进来若干对象,当读到结束符时就马上随机输出一个对象。既然是随机输出,那么在读完n个对象之前是无法决定输出哪个对象的,否则无法保证每个对象的输出概率相同。这也就是说完全可以记录下n然后 rand() mod n。所以不知道作者这里的出题意图是什么
  • 看到一个类似的题,给你一个长度为 N 的链表。N 很大,但你不知道 N 有多大。你的任务是从这 N 个元素中随机取出 k 个元素。你只能遍历这个链表一次,且必须保证取出的元素是完全随机的同上题,可采用蓄水池算法(Reservoir Sampling),假设选出来的元素存入 R[1..k] 数组中,链表记为 S,首先把遇到的前k个表元素赋值给 R[k],然后遍历 S[k+1]..S[n](下标记为i),j = rand(1,i),如果 j 在1~k范围内则用S[i] 替换 R[j] ;反复进行直到链表遍历完。

编程珠玑——第一章习题解答

1、如果不缺内存,如何使用一个具有库的
  • shuitawuhen
  • shuitawuhen
  • 2014年10月22日 13:07
  • 1487

《编程珠玑》---笔记。浏览此文,一窥此书。

第一章: 磁盘排序:对于一个提出的问题,不要未经思考就直接给出答案。要先深入研究问题,搞清楚这个问题的特点,根据这个特点,可能有更好的解决方案。   比如:文中:最初的需求只是“我如何对磁盘文件排序”...
  • yang_yulei
  • yang_yulei
  • 2014年06月30日 23:53
  • 10000

编程珠玑(开篇)--第一章习题

第一题       如果不缺内存,如何使用一个具有库的语言来实现一种排序算法以表示和排序集合? 解答:使用库函数sort,或者使用TreeSet,TreeMap 第二题     如何使...
  • kangaroo835127729
  • kangaroo835127729
  • 2015年04月26日 00:11
  • 1072

编程珠玑第六章习题二——C++实现一个数的因子分解

引申为一道题目: 将大于1的自然数N进行因式分解,满足N=a1*a2*a3…am 编一程序,对任意的自然数N, 求N的所有形式不同的因式分解方案总数。 如N=12,共有8种分解方案,它们...
  • wordwarwordwar
  • wordwarwordwar
  • 2014年11月05日 17:03
  • 655

编程珠玑第三章习题3.7(5-8)

5.将输入的单词表示成带有后缀连字符的单词package chapter3;public class t5 { public static String matchSuffix(String...
  • YellowStar5
  • YellowStar5
  • 2016年08月25日 21:15
  • 272

编程珠玑第二版第五章习题(Java)

1 (此段内容来自原书,在此向原作者表示感谢)When I write large programs, I use long names (ten or twenty characters) for ...
  • u014079441
  • u014079441
  • 2015年01月07日 10:43
  • 561

编程珠玑之第12章习题1: 随机位问题

习题描述:C库函数rand()通常返回约15个随机位。使用该函数实现函数bigrand和bigrand和randint(l, u), 要求前者至少返回30个随机位,后者返回[l,u]范围内的一个随机整...
  • JohnnyHu90
  • JohnnyHu90
  • 2014年12月31日 09:43
  • 913

编程珠玑第1章部分课后习题答案注解

1.如果不缺内存,使用一个具有库的语言来实现一种排序算法以表示
  • Bryantlei
  • Bryantlei
  • 2014年05月07日 21:48
  • 859

编程珠玑第8章-课后习题10题补充

按照原题的意思是在题目上进行扩展。 本来是要找一个连续子数组,其和最大。 那么现在习题的要求是找到这么一个连续子数组,其和的绝对值最接近0。 O(n^3)或O(^2)的实现 都很好处理。O(n...
  • ju136
  • ju136
  • 2011年11月16日 12:54
  • 1662

《编程珠玑》习题练习In Python——第一章 开篇

问题:如何给磁盘文件排序 输入:一个包含最多n个正整数的文件,每个数都小于n,其中n=10^7。如果在输入文件中有任何整数重复出现就是致命错误。没有其他数据与该数据相关联。 输出:按升序排列...
  • vincent_hbl
  • vincent_hbl
  • 2016年11月27日 16:19
  • 177
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编程珠玑 习题 十二章
举报原因:
原因补充:

(最多只允许输入30个字)