编程珠玑
文章平均质量分 75
taxue505
网络 信息安全 互联网
展开
-
磁盘排序算法(多路归并、位图)
问题描述 输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=107。如果在输入文件中有任何正数重复出现就是致命错误。没有其他数据与该正数相关联。 输出:按升序排列的输入正数的列表。 约束:最多有1MB的内存空间可用,有充足的磁盘存储空间可用。运行时间最多几分钟,运行时间为10秒就不需要进一步优化。程序设计与实现概要:应用位图或位向量表示集合。可用一个10位长的字符原创 2016-05-14 16:26:09 · 7015 阅读 · 0 评论 -
STL源码剖析——list
相较于vector的连续线性空间,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。 list不仅是一个双向链表,而且还是一个环状双向链表。另外,还有一个重要性质,插入操作和接合操作都不会造成原有的list迭代器失效,这在vecto原创 2016-06-07 20:04:26 · 1820 阅读 · 0 评论 -
变位词问题
问题描述: C. 给定一个英语词典,找出其中的所有变位词集合。例如,“pots”、“stop”和“tops”互为变位词,因为每一个单词都可以通过改变其他单词中的字母的顺序来得到。 问题解析: 1、变位词具有相同的长度,相同的字符,唯一的区别就是这些相同的字符按照不同的顺序排列成不同的字符串而已。如果有一种方法唯一标识这些相同的字符,那么这个问题好解决了。 解决方案: 方原创 2016-05-21 14:27:49 · 798 阅读 · 0 评论 -
字符串包含问题
(1) 问题描述:存在字符串1和字符串2,假设字符串2相对较短,如何快速地判定字符串2中的字符都存在于字符串1里(假定字符串只包含字母)? (2) 举例:字符串1为ABCDEFGHIJK,字符串2为ABCDE,则字符串1包含字符串2,因为字符串2中包含的字母在字符串1中也都有。 (3) 解决方案: 思路一 最直接的思路就是针对字符串2中的每个字符,轮询字符串1进行比较,看是原创 2016-05-21 14:41:25 · 861 阅读 · 0 评论 -
比较两个字符串是否为变位词
(1) 问题描述:如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,问如何在迅速匹配兄弟字符串(如,bad和adb就是兄弟字符串)。 (2) 注意:第一点中讨论了字符串包含问题,但是不要以为两个字符串互相包含就是(变位词)兄弟字符串了,例如aabcde和edcba互相包含,但它们不是变位词。 (3) 解决方案: 思路一 给每个字母分配一个素数,可以通过判断两个字符原创 2016-05-21 14:43:48 · 1195 阅读 · 0 评论 -
n元一维向量旋转问题
问题描述:B.将一个n元一维向量向左旋转i个位置。例如,当n=8且i=3时,向量abcdefgh旋转为defghabc. 简单的代码使用一个n元的中间向量在n步内完成该工作。你能否仅使用数十个额外字节的存储空间,在正比于n的时间内完成该向量的旋转?问题解析:1、以正比于n的时间(相当于n步内)完成该操作,那么就是每个元素的移动都差不多一步到位,如将第4位的d一步移动到第原创 2016-05-22 11:08:58 · 660 阅读 · 0 评论 -
40亿个随机排列整数问题
问题: 给定最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数(在文件中至少缺失一个这样的数——为什么?)。在具有足够内存的情况下,如何解决该问题?如果有几个外部的“临时”文件可用,达十年后仅有几百字节的内存,又该如何解决?解答: (1)如果具有足够的内存,可用采用位图法进行解决。需要2^32/8/1024/1024=512MB的内存。如果某个数在在文原创 2016-05-22 12:20:52 · 1890 阅读 · 0 评论 -
最大连续子向量(分治策略和扫描算法)
问题及简单算法本章引入的问题来自一维的模式识别,问题的输入是具有n个浮点数的向量x,输出是输入向量的任何连续子向量中的最大和。 例如,如果输入向量包含以下 N = 10 个元素: arr[N] = { 31, -41, 59, 26, -53, 58, 97, -93, -23, 84 } 那么该程序的输出为x[2…6]的总和,即187。 该问题分为以下几种情况:原创 2016-06-21 12:17:41 · 840 阅读 · 0 评论