zoukankan      html  css  js  c++  java
  • 编程珠玑学习笔记

    编程珠玑学习笔记

    1.在整数的存储方面有时候可以采取位图和位向量来表示。
    例如我们可以将集合{1,2,3,5,8,13}存储在下面的这个字符串中:01110100100001000000.
    集合中表示数字的各个位设置为1,而其他的位全部设为0.给定了表示文件中整数集合的位图数据结构后,我们可以将编写程序的过程分为3个自然阶段。
    第一个阶段关闭所有的位,将集合初始化为空集。
    第二个阶段读取文件中的每个整数,并打开相应的位,建立该集合。
    第三个阶段检查每个位,如果某个位是1,就写出相应的整数,从而创建已排序的输出文件。
    这样输出的文件就已排好序。

    2.将n个元素旋转i个位置。例如n=8,i=3,那么向量abcdefgh旋转后得到向量defghabc。
    第一种方法是将x[0]放到临时变量t中,然后将x[i]放x[0],x[2i]放x[i]……
    a b c d e f g h i j k l m n o p q
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
    f g h i j k l m n o p q c d e a b
    第二种方法是ab要想转为ba则可以把b中前i个字符和a换。变为abrbi->bibra
    m n o p q f g h i j k l a b c d e
    h i j k l f g m n o p q a b c d e
    f g j k l h i m n o p q a b c d e
    f g h i j k l m n o p q a b c d e
    第三种方法是ab各自翻转。再整个翻转。ab->[arbr]r->ba
    reverse(0,i-1);
    reverse(i,n-1);
    reverse(0,n-1);
    e d c b a q p o n m l k j i h g f
    f g h i j k l m n o p q a b c d e
    最后一种方法用得时间只有On,也只需要一个字节存储临时变量即可。

    3.找出词典中的变位词,例如pots、stop、tops就是变位词
    对于这个问题,我们可以分为三个步骤来进行。
    第一、对单词进行签名,也就是忽略掉单词各个字母的位置。直接根据26个字母的排位进行签名。
    这样就会使所有变位词的签名都变成同一个。
    第二、对已签名的文件进行排序,注意是根据它们的签名来排序。
    第三、将同一个变位词类中的每个单词挤压到同一行中。例如:
    pans anps pans anps pans
    pots opst pots anps snap pans snap
    pot --->签名-->opt opt --->排序-->opt opt --->挤压--> opt
    snap ---> -->anps snap ---> -->opst opst ---> -->post stop tops
    stop opst stop opst stop
    tops opst tops opst tops

    4.c语言标准库中的qsort函数可以实现一个数组的排序。具体参考百科。虽然代码不比冒泡排序少,但是执行时间却少得多。

  • 相关阅读:
    十分钟上手-搭建vue开发环境(新手教程)
    如何去掉bootstrap table中表格样式中横线竖线
    进阶攻略|前端最全的框架总结
    进阶攻略|前端完整的学习路线
    2018上半年GitHub上最热门的开源项目
    三分钟教你学会如何将密文解码成明文
    【前端图表】echarts实现散点图x轴时间轴
    IOS应用开发版本控制工具之Versions使用
    从零开始学ios开发(十七):Storyboards(上)
    ios按钮点击后翻转效果
  • 原文地址:https://www.cnblogs.com/Victorzsg/p/3467515.html
Copyright © 2011-2022 走看看