算法设计读书笔记第二章

1.渐进界

渐进上界:Big O          T(n)=O(f(n)),存在常数c>0,以及n0>=0,当n>n0时,有T(n)<=c*f(n)

渐进下界:Big Omega   与渐进上界相反

渐进紧界:Big Theta     既是渐进上界也是渐进下界


注:(1)表达式中,T(n)叫做被f(n)上界定。

(2)对于log来说底数并不重要,都可以看做一种复杂度。


2.常见的运行时间

O(n):求一序列数的最大值、合并两排好序的队列

O(nlogn):归并排序

O(n平方):穷举n个中的pair、2嵌套循环

O(n立方):三次嵌套循环(比如穷举判断一些列整数子集是否有相同元素)

O(n的k次方):穷举n个中的k个元素的子集

超越多项式时间:穷举一个n个元素集合的所有子集(2的n次方)


3.堆(优先队列)

背景:想要实现取出最小元素,以及插入一个新元素。

数组按顺序存储元素:(1)取出最小元素O(1) (2)插入一个新元素O(n)

链表用一个指针指向最小元素:(1)插入一个元素O(1)  (2)取出最小元素,并将指针移向下一个最小元素O(n)

目标:想要无论是插入新元素还是取出最小元素都不用花费O(n)

堆(父节点值比子节点值更小的平衡二叉树)

实际实现:(1)链表 (2)如果知道最多有N个元素,可以用数组。数组下标是树中节点的位置,每个节点的值是实际的值。由于是平衡的二叉树,所以父节点i到子节点为2i以及2i+1、子节点i,父节点为i/2向上取整。

一般使用数组实现堆。


(1)插入元素时,按照平衡树的方法在最后添加,如果打破了平衡,对掉子节点与父节点,直到满足堆的父节点比子节点值小的性质。

(2)取出任意元素时,取出某位置的元素,用当前堆的最后一个元素填到取出元素的位置,并将最后一个元素删去。然后判断是否满足堆的父节点比子节点值小的性质。如果不满足,则对调父子节点。值得注意的是,如果父节点变为子节点,子节点有两个,通过换到值最小的那个子节点,多了一个判断的步骤。


这样(1)插入一个元素O(logn) (2)取出一个元素O(logn)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值