CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
Path: blob/master/Day16-20/code/example01.py
Views: 729
"""1查找 - 顺序查找和二分查找2算法:解决问题的方法(步骤)3评价一个算法的好坏主要有两个指标:渐近时间复杂度和渐近空间复杂度,通常一个算法很难做到时间复杂度和空间复杂度都很低(因为时间和空间是不可调和的矛盾)4表示渐近时间复杂度通常使用大O标记5O(c):常量时间复杂度 - 哈希存储 / 布隆过滤器6O(log_2 n):对数时间复杂度 - 折半查找7O(n):线性时间复杂度 - 顺序查找8O(n * log_2 n):- 对数线性时间复杂度 - 高级排序算法(归并排序、快速排序)9O(n ** 2):平方时间复杂度 - 简单排序算法(冒泡排序、选择排序、插入排序)10O(n ** 3):立方时间复杂度 - Floyd算法 / 矩阵乘法运算11也称为多项式时间复杂度12O(2 ** n):几何级数时间复杂度 - 汉诺塔13O(3 ** n):几何级数时间复杂度14也称为指数时间复杂度15O(n!):阶乘时间复杂度 - 旅行经销商问题 - NP16"""17from math import log2, factorial18from matplotlib import pyplot1920import numpy212223def seq_search(items: list, elem) -> int:24"""顺序查找"""25for index, item in enumerate(items):26if elem == item:27return index28return -1293031def bin_search(items, elem):32"""二分查找"""33start, end = 0, len(items) - 134while start <= end:35mid = (start + end) // 236if elem > items[mid]:37start = mid + 138elif elem < items[mid]:39end = mid - 140else:41return mid42return -1434445def main():46"""主函数(程序入口)"""47num = 648styles = ['r-.', 'g-*', 'b-o', 'y-x', 'c-^', 'm-+', 'k-d']49legends = ['对数', '线性', '线性对数', '平方', '立方', '几何级数', '阶乘']50x_data = [x for x in range(1, num + 1)]51y_data1 = [log2(y) for y in range(1, num + 1)]52y_data2 = [y for y in range(1, num + 1)]53y_data3 = [y * log2(y) for y in range(1, num + 1)]54y_data4 = [y ** 2 for y in range(1, num + 1)]55y_data5 = [y ** 3 for y in range(1, num + 1)]56y_data6 = [3 ** y for y in range(1, num + 1)]57y_data7 = [factorial(y) for y in range(1, num + 1)]58y_datas = [y_data1, y_data2, y_data3, y_data4, y_data5, y_data6, y_data7]59for index, y_data in enumerate(y_datas):60pyplot.plot(x_data, y_data, styles[index])61pyplot.legend(legends)62pyplot.xticks(numpy.arange(1, 7, step=1))63pyplot.yticks(numpy.arange(0, 751, step=50))64pyplot.show()656667if __name__ == '__main__':68main()697071