• 读书笔记 第一章到第三章


    2.1节

     1 insertion-sort(A) 插入排序法  (非降序排列) //复杂度为θ(n^2)
     2 
     3 for j=2 to length[A]
     4 
     5 {  
     6 
     7      do key=A[j]
     8 
     9           i=j-1
    10 
    11           while i>0 and A[i]>key
    12 
    13           {      
    14 
    15                    do A[i+1]=A[i]
    16 
    17                    i=i-1
    18 
    19           }
    20 
    21           A[i+1]=key
    22 
    23 }

    2.2节

    将一个整数的(二进制)各位向左移k位,相当于将该数乘上2^k,但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。

    2.3节

    devide-and-conquer 分治法

    很多算法结构上呈现递归,不断调用本身去解决子问题,然后合并来解决原问题。

    举例:merge-sort 合并排序法

    Divide:将n个元素分成各含n/2个元素的子序列

    Conquer:用合并排序法对两个子序列递归地排序

    Combine:合并已排序的子序列以得到排序结果

    当子序列长度为1时,递归结束,单个元素被看做已排序好的。

     1 merge(A,p,q,r) //A是一个数组,p,q,r都是下标,且p<=q<r,该过程假设子数组A[p..q],A[q+1..r]都已排好序
     2 n1=q-p+1       
     3 n2=r-q         //计算子数组长度
     4 create arrays L[1..n1+1] and R[1..n2+1]
     5 for i=1 to n1
     6     do L[i]=A[p+i-1]
     7 for j=1 to n2
     8     do R[j]=A[q+j]
     9 L[n1+1]=无穷大 //称这个为两堆排序完好的扑克牌底部的哨兵牌,我们设想的是当一堆牌全部取出来之后可以将剩下的另外一堆牌直接丢进合并堆中,哨兵牌不可能小于某一张牌,所以它相当于实现了这一设想。
    10 R[n2+1]=无穷大
    11 i=1
    12 j=1
    13 for k=p to r
    14     do if L[i]<=R[i]
    15        then A[k]=L[i]
    16             i++
    17        else A[k]=R[j]
    18             j++

    以上就是合并排序的merge过程,它的复杂度是θ(n)。

    分治法的精髓

    合并排序的时间复杂度为θ(nlgn),对数函数的增长速度比任何线性函数增长都要慢。

    第三章

    函数的增长

    渐进确界,渐进上界,渐进下界的三个符号的定义以及曲线图,非常形象。

    这块渐进符号的还是比较乱,以后再实践。

  • 相关阅读:
    scrapy 知乎用户信息爬虫
    快读模板&&快出模板
    洛谷P7078 贪吃蛇
    CSP2020-S1总结
    洛谷P1736 创意吃鱼法
    luogu P3004 [USACO10DEC]宝箱Treasure Chest
    Markdown与LaTeX
    洛谷P2197 【模板】nim游戏
    洛谷CF1360H Binary Median
    洛谷P1063 能量项链
  • 原文地址:https://www.cnblogs.com/whatthefy/p/2989709.html
Copyright © 2020-2023  润新知