算法导论(第三版)练习 6.5-1 ~ 6.5-9

6.5-1

 

6.5-2

 

6.5-3

#005# 优先队列

 

6.5-4

为了正确复用Heap-increase-key中的代码

 

6.5-5

初始化:显然满足

保持:如果在迭代之前循环不变式为真,那么要么不再进行迭代(A[parent(i)]>A[i]),此时已经保持了循环不变式,要么进行一次交换令A[parent(i)]>A[i],并令i=parent(i)此时也保持了循环不变式,所以迭代之后循环不变式仍然为真。

终止:在停止的时候,原来的A[i](唯一的例外因素)已经被调整到合适的位置,数组整体必定满足A[parent(i)]>A[i]

 

6.5-6

                static increasePriority(A, i, newPriority) {
                    if (newPriority < A[i].priority) {
                        return;
                    }
                    
                    let temp = A[i]; // 待插入元素
                    temp.priority = newPriority;
                    while (i > 1 && A[Heap.parent(i)].priority < newPriority) {
                        A[i] = A[Heap.parent(i)];        
                        i = Heap.parent(i);
                    } // 寻找合适的插入位置
                    A[i] = temp; // 插入元素
                }

 

6.5-7

            // 用优先队列实现先进先出队列
            let queue = new PriorityQueue();
            let priorityOfQueue = 100;
            queue.insertWithPriority("first in", priorityOfQueue--);
            queue.insertWithPriority("second in", priorityOfQueue--);
            console.log(queue.pullHighestPriorityElement());
            console.log(queue.pullHighestPriorityElement());
            /**
             * output=
             * first in 
             * second in 
             */
            
            // 用优先队列实现栈
            let stack = new PriorityQueue();
            let priorityOfStack = 0;
            stack.insertWithPriority("first in", priorityOfStack++);
            stack.insertWithPriority("second in", priorityOfStack++);
            console.log(stack.pullHighestPriorityElement());
            console.log(stack.pullHighestPriorityElement());
            /**
             * output=
             * second in 
             * first in 
             */

 

6.5-8

略。。

 

6.5-9

可参考算法导论第六章-堆排序(五)

转载于:https://www.cnblogs.com/xkxf/p/9789211.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。各章自成体系,可以作为独立的学习单元。算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂。说明和解释力求浅显易懂,不失深度和数学严谨性。   本书自第1版出版以来,已经成为世界范围内广泛使用的大学教材和专业人员的标准参考书。第2版增加了论述算法作用、概率分析与随机算法、线性规划等几章。同时,对第1版的几乎每一节都作了大量的修订。一项巧妙而又重要的修改是提前引入循环不变式,并在全书中用来证明算法的正确性。在不改变数学和分析重点的前提下,作者将许多数学基础知识从第一部分移到了附录中,并在开始部分加入了一些富有诱导性的题材。   ★经典的算法书,被卓越网,《程序员》等评选为2006年最受读者喜爱的十大IT图书之一。   ★算法领域的标准教材,全球多所知名大学选用    ★MIT名师联手铸就,被誉为“计算机算法的圣经”    ★编写上采用了“五个一”,即一章介绍一个算法、一种设计技术、一个应用领域和一个相关话题。    以相当的深度介绍了许多常用的数据结构和有效的算法,使得这些算法的设计和分析易于被各个层次的读者所理解。教学网址、视频课程及在线学习中心,全方位学习模式,内容很丰富。
算法导论 第三版》是由Thomas H. Cormen (作者)、Charles E. Leiserson (作者)、Ronald L. Rivest (作者)和Clifford Stein (作者)共同编写的一本经典教材。该书对算法导论的内容进行了全面、系统的阐述,是计算机科学领域的经典之作。 这本书的全书共分6个部分,包括基础知识、排序和顺序统计量、数据结构、高级设计和分析技术、高级数据结构、图算法等。通过讲解不同的算法和数据结构,读者能够深入理解算法设计和分析的基本原理和技巧。 《算法导论 第三版》的特点之一是结合了理论和实践,既讲解了算法的理论基础,也提供了实践中的应用和案例。读者通过实践演练和编程实践,能够更好地理解和掌握算法的操作过程和性能分析。 此外,《算法导论 第三版》还提供了大量的习题和题解,读者可以通过习题的解答来巩固和检验自己的知识掌握程度。同时,书中还介绍了一些经典的算法问题和解决方法,为读者提供了解决实际问题的思路和方法。 总之,作为一本经典的计算机科学教材,《算法导论 第三版》是学习和研究算法设计与分析的重要参考书。通过系统地学习该书的内容,读者能够建立起扎实的算法基础,提高问题解决和程序设计能力,对于计算机科学的学习和研究具有重要的指导作用。同时,该书也适合作为计算机专业相关课程的教材使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值