随笔分类 -  编程珠玑

摘要:组合问题 以下两个题目是等价的: 题目1:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有空、a、b、c、ab、ac、bc、abc。 题目2:打印一个集合所有的子集和,比如{a,b,c}的子集和有{a},{b},{c},{a,b},{a,c},{b,c},{a,b, 阅读全文
posted @ 2018-01-17 23:27 小僧尤里 阅读(1667) 评论(0) 推荐(0)
摘要:一、简介 两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5),因为252 ÷105 = 2......42,所以 阅读全文
posted @ 2018-01-17 23:09 小僧尤里 阅读(4680) 评论(0) 推荐(0)
摘要:第4题,杂技算法只交换一次,貌似比求逆快,但是时间还与cache与内存的块交换有关,因为杂技算计访问的数据不连续,并且每次又只访问一个元素,频繁的换进换出,所以实际时间长。 第6题,给每个名字编码,将编码一样的放在一起,并按字典序顺序排列,查找的时候二分查找就可以了。 第7题,其实就是把列作为标识, 阅读全文
posted @ 2018-01-17 23:05 小僧尤里 阅读(512) 评论(0) 推荐(0)
摘要:尽管排列组合是生活中经常遇到的问题,可在程序设计时,不深入思考或者经验不足都让人无从下手。全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。 所谓全排列,就是打印出字符串中所有字符的所有排列。例如输入字符串abc,则打印出 a、b、c 所 阅读全文
posted @ 2018-01-17 23:01 小僧尤里 阅读(566) 评论(0) 推荐(0)
摘要:变位词(anagrams):指的是组成两个单词的字符相同,但位置不同的单词。比如说,abbcd和abcdb就是一对变位词。在介绍问题c之前,我们先看看如何判断两个字符串是否是变位词。 分析:求解题目C有两种思路: 【思路一】 由于变位词只是字母的顺序改变,字符长度,字符种类没有改变,所以根据此我们只 阅读全文
posted @ 2018-01-17 22:53 小僧尤里 阅读(437) 评论(0) 推荐(0)
摘要:问题B:将一个n元一维向量向左旋转i个位置。例如,当n = 8且i = 3时,向量abcdefgh旋转为defghabc。 方法一、使用一个字节的额外空间开销。 采用每次向左移一位的方法,循环i次。当然也可以使用向右移动的方法,循环length - i次。以向左移动为例,共需要移动i趟,首先把str 阅读全文
posted @ 2018-01-17 22:46 小僧尤里 阅读(363) 评论(0) 推荐(0)
摘要:A题 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中一32位整数。有三个问题:(1)在文件中至少存在这样一个数?(2)如果有足够的内存,如何处理?(3)如果内存不足,仅可以用文件来进行处理,如何处理? 答案: (1)32位整数,包括-2146473648~~2146473 阅读全文
posted @ 2018-01-17 22:38 小僧尤里 阅读(570) 评论(0) 推荐(0)
摘要:1. 如果不缺内存,如何使用一个具有库的语言来实现一种排序算法以表示和排序集合? 任何排序算法都可以,通常用快速排序。 2. 如何使用位逻辑运算 (如与、或、移位)来实现位向量? 假如需要对N个不重复整数(最大值为N)进行排序,可以定义布尔类型的数组bool a[N]。当然本题目中使用Int[1+n 阅读全文
posted @ 2018-01-17 22:31 小僧尤里 阅读(1085) 评论(0) 推荐(0)
摘要:一、利用随机数函数生成随机数 问题1(《编程珠玑》习题12.1后半段): 给定一个rand(),可以产生从0到RAND_MAX的随机数,其中RAND_MAX很大(常见值:16位int能表示的最大整数32767),写出利用rand()生成[a,b]中任意整数的函数,其中a>=0, b<=RAND_MA 阅读全文
posted @ 2018-01-17 22:28 小僧尤里 阅读(1175) 评论(0) 推荐(0)
摘要:rand()函数的实现方法有很多,一种最简单的实现原理是这样的: 原理就是这样,假如初始种子为1,那么1*1234+5678会得到一个伪随机数6912,再把6912作为下次的种子带入式中,6912*1234+5678 就得到了序列中的下一个伪随机数……,种子u_seed应该是静态的,是为了保证每次调 阅读全文
posted @ 2018-01-15 23:56 小僧尤里 阅读(2181) 评论(0) 推荐(0)
摘要:qsort包含在<stdlib.h>头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序。排序之后的结果仍然放在原数组中。使用qsort函数必须自己写一个比较函数。 函数原型: void qsort ( void * base, size_t num, size_t size, in 阅读全文
posted @ 2018-01-15 23:38 小僧尤里 阅读(438) 评论(0) 推荐(0)
摘要:问题:给定输入文件,文件中每条记录是一个整型数(不重复),每条记录最大为n,n<=10000000,要求对文件中所有记录排序(从小到大),然后输入到给定文件。 限制:主存不超过1MB 位图排序就是使用一张表来记录关键字的存在状态(存在或不存在),然后通过采集到的状态(在/不在)通过一次遍历来确定序列 阅读全文
posted @ 2018-01-15 23:20 小僧尤里 阅读(204) 评论(1) 推荐(0)