zoukankan      html  css  js  c++  java
  • 算法导论Ch1-Ch2

    第一章~第二章:

    1. 几种常见的排序方法

    1.1 插入排序

    #!/usr/bin/env python

    # -*- coding:UTF-8 -*-

    '''CLRS p10'''

    def insertion_sort(A):

        for j in range(1,len(A),1):

            key = A[j]

            i = j-1

            while i >= 0 and A[i] > key:

                A[i+1] = A[i]

                i = i-1

            A[i+1] = key

    if  __name__ == '__main__':

        A = [9,3,5,2,3,5,7,8,9,1]

        insertion_sort(A)

    1.2 选择排序

    #!/usr/bin/env python

    # -*- coding:UTF-8 -*-

    '''CLRS p16'''

    def selection_sort(A):

        i = 0

        while i < len(A)-1:

            minIndex = i

            minA = A[i]

            for j in range(i,len(A),1):

                if minA > A[j]:

                    minA = A[j]

                    minIndex = j

            tmp = A[i]

            A[i] = A[minIndex]

            A[minIndex] = tmp

            i += 1

                  

    if  __name__ == '__main__':

        A = [9,3,5,2,3,5,7,8,9,1]

        selection_sort(A)

    1.3 归并排序

    #!/usr/bin/env python

    # -*- coding:UTF-8 -*-

    import math

    '''CLRS p16'''

    def merge(A,p,q,r):

        n1 = q - p + 1

        n2 = r - q

        L = A[p:q+1]

        R = A[q+1:r+1]

        L.append(float("inf"))

        R.append(float("inf"))

        i = 0

        j = 0

        for k in range(p,r+1,1):

            if L[i] <= R[j]:

                A[k] = L[i]

                i +=1

            else:

                A[k] = R[j]

                j += 1

        

    def merge_sort(A,p,r):

        if p < r:

            q = math.floor((p+r)/2)

            merge_sort(A,p,q)

            merge_sort(A,q+1,r)

            merge(A,p,q,r)

            

    if  __name__ == '__main__':

        A = [9,3,5,2,3,5,7,8,9,1,11,20,0,2]

        print(A)

        merge_sort(A,0,len(A)-1)

        print(A)

    1.4 冒泡排序

    #!/usr/bin/env python

    # -*- coding:UTF-8 -*-

    '''CLRS p23'''

    def bubble_sort(A):

        for i in range(0,len(A)-1,1):

            for j in range(len(A)-1, i,-1):

                if A[j] < A[j-1]:

                    tmp = A[j]

                    A[j] = A[j-1]

                    A[j-1] = tmp

    if  __name__ == '__main__':

        A = [9,3,5,2,3,5,7,8,9,1,11,20,0,2]

        bubble_sort(A)

    2. 循环不变式

    帮助理解算法的正确性。

    初始化:循环的第一次迭代之前,它为真。

    保持:如果循环的某次迭代之前它为真,那么下次迭代之前它仍然为真。

    终止:在循环终止时,不变式为我们提供一个有用的性质,该性质有助于证明算法是正确的。

    3. 分治法

    分解:原问题分解为若干子问题,这些子问题是原问题的规模较小的实例。

    解决:解决这些子问题,递归解决各个子问题。若子问题规模足够小,则直接求解。

    合并:这些子问题的解成为原问题的解。

    4. 几种增长极比较

    未定式极限的洛必达法则

     

  • 相关阅读:
    oracle中查询或插入特殊字符
    html最多显示两行,css 实现两行或多行文本溢出显示省略号(...)
    RT
    发表一个自己做的WPF游戏
    用silverlight制作自己的GIS
    一个字符串切割问题
    Oracle所有者权限与调用者权限(转)
    Oracle角色权限的使用事项(转)
    Tomcat 内存溢出 详解
    forms验证:怎么验证两种身份?
  • 原文地址:https://www.cnblogs.com/sunnypoem/p/10864034.html
Copyright © 2011-2022 走看看