zoukankan      html  css  js  c++  java
  • 算法导论: 第6章

    6-2 对d叉堆的分析

    a)用A[1]表示根,则其儿子为A[2]到A[d+1],其孙子为A[d+2]到A[d^2+d+1],以此类推。所以有

    d-parent(i):

    return [(i-2)/d + 1]  (方括号表示下取整)

    d-child(i,j):

    return d(i-1) + j + 1

    b)由于每个节点有d个儿子,所以含n个元素的d叉堆的高度为O(logdn) = O(lgn/lgd)。

    c)由于输出最大值后的调整,需要从d个儿子中选出最大的,故每层的调整都需要d次,有logdn层,故为O(d*logdn)。

    d)树的高度,为O(logdn)。

    e)跟插入一样,为O(logdn)。

    6-3 Young氏矩阵

    c) 提取出最小元素后,需要有一个调整过程。将下方或者右方较小的元素提上来放到A[1,1]处,然后接着调整。所以有T(m,n) = T(m-1,n)|T(m,n-1) + 1。最坏是m和n每次都轮流减1,即为O(m+n)。

    d)插入元素后,将它跟左方以及上方的元素比较,跟较大的那个交换。重复之,直到没有左方或者上方的元素比它大。很显然,还是 O(m+n)

    e)建立矩阵,需要不断插入n^2个元素,复杂度为2n^3,然后不断Extract-min即可。

    f)总是与最右上角比较,如果等于,则返回。

    如果大于,去除右上角元素所在的这一行。

    如果小于,去除右上角元素所在的这一列。

  • 相关阅读:
    Metaclass
    Pydantic
    Alembic
    SQLAlchemy
    django2:路由path语法
    Django 学习笔记之模型高级用法
    Flask拾遗总汇1
    Flask中before_request与after_request使用
    Flask 中字典数据返回(jsonify)
    浅析django的abstract,proxy, managed
  • 原文地址:https://www.cnblogs.com/rolling-stone/p/3652924.html
Copyright © 2011-2022 走看看