【算法导论】第1、2章,算法入门

【1】算法简介

1.1 

排序的重要问题:

1、排序项数

2、已经排序的程度、

3、项值的可能限制

4、计算机体系结构

5、储存设备的种类

 

1.2 

衡量算法的主要标准:时间 & 空间

 

 

【2】算法入门

2.1 插入排序

循环不变式:前i个总是排好顺序的。增量法

插入排序python代码

def insertSorted(xList):
    n = len(xList)
    for sortIdx in range(1, n):
        cache = xList[sortIdx]
        idx = sortIdx - 1
        while idx >= 0 and xList[idx] > cache:
            xList[idx+1] = xList[idx]
            idx -= 1
        xList[idx+1] = cache
    return xList

if __name__ == '__main__':
    print insertSorted([1, ])
    print insertSorted([2, 1])
    print insertSorted([2, 2, 1])
    print insertSorted([2, 3, 4, 1])
    print insertSorted([1, 2, 4, 3])
    randomList = range(10)
    random.shuffle(randomList)
    print 'random:', randomList
    print insertSorted(randomList)

 

2.2 算法简单分析

在分析算法之前,要建立实现技术的模型:单处理器,随机存取机(RAM): 无法并行,不包含层次存储。

算法的有效性:通常是时间

常见的常数时间指令:算术指令(加减乘除、取余、向上下取整),数据移动指令(装入、储存、复制),控制指令(转移,子程序调用与返回),2^k

插入排序的平均情况O(n^2), 

 

2.3 另外的算法设计方法

分治法:递归解决问题

D(n)为分解问题需要的时间

C(n)是子问题合成为原问题的时间

对于本问题,每一层代价都是cn,总共有lg(n)层

 

合并排序Python代码

def merge(originList, start, mid, end):
    xList = originList[start:mid] + [np.inf]
    yList = originList[mid:end] + [np.inf]
    zList = []
    idxX, idxY = 0, 0
    for i in range(len(xList + yList) - 2):
        x, y = xList[idxX], yList[idxY]
        if x < y:
            zList.append(x)
            idxX += 1
        else:
            zList.append(y)
            idxY += 1
    originList[start:end] = zList
    return originList

def mergeSort(xList, start=0, end=None):
    if end is None:
        end = len(xList)
    if start < end - 1:
        mid = int((start + end) / 2.)
        mergeSort(xList, start, mid)
        mergeSort(xList, mid, end)
        xList = merge(xList, start, mid, end)
    return xList


if __name__ == '__main__':
    print mergeSort([1, ])
    print mergeSort([2, 1])
    print mergeSort([2, 2, 1])
    print mergeSort([2, 3, 4, 1])
    print mergeSort([1, 2, 4, 3])
    randomList = range(10)
    random.shuffle(randomList)
    print 'random:', randomList
    print mergeSort(randomList)

  

posted on 2017-07-23 21:43  yesuuu  阅读(208)  评论(0编辑  收藏  举报

导航