zoukankan      html  css  js  c++  java
  • 算法导论 第一章and第二章(python)

    算法导论 第一章
    算法
        输入--(算法)-->输出
     
    解决的问题
        识别DNA(排序,最长公共子序列,) # 确定一部分用法
        互联网快速访问索引
        电子商务(数值算法and数论)
        交通图。。。(图论,旅行社问题)
        拓扑排序 #
     
     
    第二章 
    2.1插入排序
        
         #p11 伪代码预定留意一下  #(算法导论 第3版 中文)
     
        循环不变式?
            循环 j++
            不变 A[1..j-1] 一直有序
     
         正确性证明:# 套用一下数学归纳法的思路 (这个笔记想重新重视一下数学思路)
               初始化:  j=1                         时 A[1]有序
               保持:     j = n-1,j = n       A[1..j-1] 都有序(n-1 成立 n也成立)
               终止:    j  > A.length         (算法有穷性:(数据结构:严蔚敏 好像是第一章))
     
    def INSERTION_SORT(A):
        for j in range(1,len(A)): # ython[,) #算法导论从1开始 python list从0开始
            #print(A[j]) #test
            key = A[j]
            i = j - 1
            while i >=0 and A[i] > key:
                A[i + 1] = A[i]
                i -= 1
            A[i + 1] = key
    
    if __name__ == '__main__':
        A = [5,2,6,1,3]
        INSERTION_SORT(A) # 和java 传值相识 c指针?:**p
        print(A)
    =================== RESTART: F:/python/2_1_insert_sort.py ===================
    [1, 2, 3, 5, 6]
     
        环境#win7 python 3.5.1 通过
        @python list 设计和c++STL的array相似(stl源码剖析:侯捷)
     
    2.2分析算法
        采用模型:单处理机 随机访问机(random-access machine ,RAM)
       增长级别: O(N**2)
     
    2.3分治法
           思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解建立原问题的解
        步骤:分解 解决 归并
    归并:
    分解 解决
        不断分成1/2处理(似二叉树后续遍历
     
      
    import decimal
    def MERGE(A,p,q,r): #归并
        n1 = q - p +1
        n2 = r - q
        L = []
        R = []
        for i in range(n1):
            L.append(A[p + i]) # 0开始
        for j in range(n2):
            R.append(A[q + j+1]) #A[q+1 ,r]
        L.append(decimal.MAX_EMAX ) #10机制模块64位999999999999999999 
        R.append(decimal.MAX_EMAX)
        i = 0
        j = 0
        for k in range(p,r+1): #A[p,r]
            if L[i] <= R[j]:
                A[k] = L[i]
                i += 1
            else:
                A[k] = R[j]
                j += 1
     
    def MERGE_SORT(A,p,r): #A[p,r]
        if p < r:
            q = (p + r)//2 
            MERGE_SORT(A,p,q)
            MERGE_SORT(A,q+1,r)
            MERGE(A,p,q,r)
     
    if __name__ == '__main__':
        A = [5,2,4,7,1,3,2,6]
        print(A)
        MERGE_SORT(A,0,len(A)-1) 
        print(A)
     
    '''
    结果:
    ============== RESTART: F:pythonalgorithms2_3_merge_sort.py ==============
    [5, 2, 4, 7, 1, 3, 2, 6]
    [1, 2, 2, 3, 4, 5, 6, 7]
    环境:win7 python3.5.1
    注意: A区间的选取 python 的list从0开始 我选的是[ , ]
     
    '''
     
    参考 引用:#这个不知道怎么写- -!
         
  • 相关阅读:
    Java线程池
    Servlet实现网页十天免登陆功能
    代码实现QQ消息轰炸
    数组模拟栈数据结构
    约瑟夫问题以及环形链表的解决方案
    ServletConfig中的方法
    Servlet的生命周期
    数组模拟环形队列
    数组模拟队列
    多线程实现奇偶数的依次输出
  • 原文地址:https://www.cnblogs.com/liguan/p/5151247.html
Copyright © 2011-2022 走看看