zoukankan      html  css  js  c++  java
  • 第8章 线性时间排序

    一、概念

    任何比较排序在最坏情况下都要用O(lgn)次比较不进行排序

    计算排序、基数排序、桶排序都是稳定排序

    二、代码

    三、练习

    8.1-1
    决策树是一棵二叉树,每个节点表示元素之间一组可能的排序,它与已进行的比较相一致,比较的结果是树的边。
    令T是深度为d的二叉树,则T最多有2^T片叶子。具有L片叶子的二叉树深度至少是lgL。
    n个元素排序会有n!个不同的大小关系,其决策树必然有n!片树叶,因此决策树的深度至少是lg(n!)

    8.2-1因为假设待排序数据的范围中[0,k],所以B被初始化为-1

    8.2-3
    不稳定
    8.2-4
    COUNTING-SORT(A, B, k)中步骤L1-L4求出C,ans = C[b] - C[a-1], C[-1]=0

    8.3-1
    8.3-2
    稳定排序有:插入排序,合并排序
    方法:为每一个元素加入一个最初位置的属性,但两个元素的value一样大时,比较position,这样不会有相同的两个元素
    额外空间:O(4n)
    8.3-3
    把整数转换为n进制再排序,见算法导论8.3-4
    8.3-4
    最坏情况下需要d遍

    8.4-1
    8.4-2
    最坏情况是O(n^2)
    修改:使用最坏情况下时间为O(nlgn)的算法来处理桶的插入操作
    8.4-3
    E(X^2)=3/2
    E^2(X)=1/2不知道怎么算
    8.4-4
    假设分为n个桶
    BUCKET-SORT(A)
    1    n <- length[A]
    2    for i <- 1 to n
    3    do insert A[i] to list B[n*(A[i].x^2 + A[i].y^2)]
    4    for i <- 0 to n-1
    5        do sort list B[i] with insertion sort
    6    concatenate the lists B[0], B[1], ……,B[n-1] together in order
    8.4-5

    8-2
    计数排序:时间O(k+n),稳定,空间O(k+n)
    基数排序:时间O(d*(k+n)),稳定,无额外空间
    桶排序:时间O(n),稳定,空间O(n)
    a)计数排序、基数排序、桶排序
    b)基数排序
    c)基数排序
    d)基数排序
    e)不稳定


    8-3
    a)先用桶排序(答案里面是计数排序)方法按数字位数排序O(n),再用基数排序的方法分别对每个桶中的元素排序O(n)
    b)递归使用计数排序,先依据第一个字母进行排序,首字相同的放在同一组(我觉得更像是桶排序,再对每一组分别使用计数排序的方法比较第二个字母
    见到有人用字典树,也是可以的

    8-4
    a)最原始的比较方法,所有的红水壶与所有的蓝水壶依次比较
    c)算法类似于快排,由于不是同种颜色的水壶之间比较,所以采用交叉比较
    step1:从红色水壶中随机选择一个
    step2:以红色水壶为主元对蓝色水壶进行划分
    step3:划分的结果是两个数组,并得到与红色水壶相同大小的蓝色水壶
    step4:以这个蓝色水壶为主元,对红色水壶进行划分
    step5:用step1到step4的过程不断迭代
     
    8-5
    a)1排序是完全排序
    b)1,3,2,4,5,7,6,8,9,10
    d)
    step1:分别把1, 1+k, 1+2k, 1+3k,……;2, 2+k, 2+2k, 2+3k,……;……当作是单独的集合
    step2:对每个集合进行排序时间为O(nlg(n/k))
    e)
    step1:同d)step1
    step2:用堆排序进行k路合并,见算法导论6.5-8堆排序-K路合并
  • 相关阅读:
    单例模式
    C++继承-重载-多态-虚函数
    c++仿函数 functor
    常用排序算法实现与效率比较
    树的中序非递归遍历
    二叉树递归遍历
    队列的顺序存储框架
    栈的链式存储框架
    栈的顺序存储构架
    函数指针和回调函数
  • 原文地址:https://www.cnblogs.com/windmissing/p/2559798.html
Copyright © 2011-2022 走看看