zoukankan      html  css  js  c++  java
  • 编程珠玑第一章、第二章

    利用位图排序

    问题:一个最多包含n个正整数的文件,每个数都小于n,n = 1000 0000。文件中的正整数没有重复的,请按升序排列这些整数。可用内存空间只有1MB左右,运行时间在10秒左右。

          解决方法:使用一个具有1000万个位的为序列表示这个文件中的所有整数。当且仅当整数 i 在文件中时,第 i 位为1。用C++具体实现的话,可用使用位域bitset来实现。bitset<10000000> my_bitset;

    找出一个不在文件中的数

    问题:给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32bit表示的整数。

        解决方法:因为32bit可用表示的最大无符号整数为小43亿,所以一定存在至少一个这样的整数。具体解决方法为,利用二分查找的思想,通过统计中间点之上和之下的元素个数来探测范围:或者上面或者下面的范围具有至多全部范围的一半元素。

    向量abcdefgh向左旋转3个位置

    问题:将向量abcdefgh向左旋转 i=3 个位置。

          解决方法:翻转算法。

       1: reverse(0, i-1);    /* cbadefgh */
       2: reverse(i, n-1);    /* cbahgfed */
       3: reverse(0, n-1);    /* defghabc */

          此方法可用通过翻转左右手来进行演示和理解,十个手指分别代表十个数1~10。

    找出变位词

    问题:找出字典中的变位词,如stop和tops。

          解决办法: 分为3步。第一步,给每个单词增加一个标识,标识由该单词的字母排序后组成,这样,变位词就具有了相同的标识符。第二步,按照标识符对单词进行排序。第三步,输出。如果用C语言实现的话,需要用到一个qsort 函数,类似于C++ STL中的排序算法。

  • 相关阅读:
    学习之路五:再议自定义时钟类(跨线程间的访问操作) → 异步操作
    学习之路七:一步一步学习ASP.NET数据绑定
    走进单元测试五:单元测试文章系列目录
    迷茫后的感悟
    学习之路八:解决不能调试服务端代码的问题
    asp.net not found
    java内部类
    DEBUG&TRACE
    Lambda表达式
    基于事件的异步模式
  • 原文地址:https://www.cnblogs.com/younes/p/1728221.html
Copyright © 2011-2022 走看看