zoukankan      html  css  js  c++  java
  • 《算法导论》笔记 第8章 8.3基数排序

    【笔记】


    基数排序按最低有效位数字进行排序。

    给定n个d位数,每一个数位可取k种可能的值。如果所用的稳定排序需要Θ(d(n+k))的时间正确地堆这些数进行排序。

    给定n个b位数和任何正整数r<=b,如果采用稳定排序需要Θ(n+k)时间,那么RADIX-SORT能在Θ((b/r)(n+2^r))时间内正确的对这些数进行排序。


    【练习】


    8.3-1 示出基数排序RADIX-SORT作用于下列英语单词上的过程:"COW","DOG","SEA","RUG","ROW","MOB","BOX","TAB","BAR","EAR","TAR","DIG","BIG","TEA","NOW","FOX"。

    SEA TEA MOB TAB DOG RUG DIG BIG BAR EAR TAR COW ROW NOW BOX FOX
    TAB BAR EAR TAR SEA TEA DIG BIG MOB DOG COW ROW NOW BOX FOX RUG
    BAR BIG BOX COW DIG DOG EAR FOX MOB NOW ROW RUG SEA TAB TAR TEA


    8.3-2 下面的算法中那些是稳定的:插入排序,合并排序,堆排序和快速排序?给出一个能使任何排序算法都稳定的方法。所给出的方法带来的额外时空开销是多少?

    插入排序、合并排序稳定,堆排序和快速排序不稳定。

    为每个元素附加一个域,表示其在原始数组中的位置。在排序中的比较过程中,若数据相同,则比较附加域,附加域小的在前。由于附加域全部不相同,所以最后的结果是稳定的。额外带来时间开销*2,空间开销n。


    8.3-3 利用归纳法来证明基数排序算法能正常工作。在所给出的证明中,哪个地方需要假设排序是稳定的?

    当开始处理最低位时,最低位变为有序。

    当第2次处理时,低第2位变为有序,对于该位相同的数字,由于之前低位是有序的,因此内部仍是排序的。

    当第i次处理时,低第i位变为有序,对于第i位相同的数字,由于前i-1位是有序的,因此内部仍是排序的。

    当第n次处理后,数列变为有序。

    对于第i位相同数字,要想前i-1位有序,要假设排序是稳定的。


    8.3-4 说明如何在O(n)时间内,对0到n^2-1之间的n个整数进行排序。

    将数据x转化为2位n进制数,即x=d1*n+d2,对其进行基数排序,则其时间复杂度为O(n+2)=O(n)。


    *8.3-5 在本节第一个卡片排序算法中,为排序d位十进制数,在最坏情况下需要排序几遍?最坏情况下操作员要看管几堆卡片?

    每排序一遍就分为10堆卡片。第一位排序1遍,第二位10遍,第i位10^(i-1) 遍,最坏景象下需排序(10^d-1)/9遍。在第d位共有10^d堆。



  • 相关阅读:
    浅谈Dynamic 关键字系列之三(下):ExpandoObject,DynamicObject,DynamicMetaObject
    完全详解Silverlight 下载文件
    在内部循环中Continue外部循环
    浅谈Dynamic 关键字系列之四:dynamic为什么比反射快
    Android学习笔记(三)基础知识(2)
    Android学习笔记(一) 使用选择部件
    Android学习笔记(四)时钟、时间
    每周一道数据结构(三)树、二叉树、最优二叉树
    Linux内核设计与实现笔记(二) 内存管理、进程地址空间
    Windows下Hadoop eclipse开发平台搭建
  • 原文地址:https://www.cnblogs.com/cyendra/p/3681620.html
Copyright © 2011-2022 走看看