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中的排序算法。

  • 相关阅读:
    mysql笔记
    ssh学习笔记
    oracle数据向历史表数据迁移————procedure
    关于避免模糊查询索引时效问题
    css圣杯布局和双飞翼布局篇
    什么是hasLayout
    高度自适应的水平垂直居中布局
    MAC的GIF动图录屏软件LICECAP
    sublime text 快捷键shortcuts
    为表格合并边框的样式
  • 原文地址:https://www.cnblogs.com/younes/p/1728221.html
Copyright © 2011-2022 走看看