摘要:一、贪心算法 贪心算法在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法并不保证会得到最优解,但是在某些问题上贪心算法的解就是最优解。要会判断一个问题能否用贪心算法来计算。 ''' 贪心算法例子1: 找零n元钱,面额100
阅读全文
随笔分类 - 数据结构和算法
摘要:一、贪心算法 贪心算法在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法并不保证会得到最优解,但是在某些问题上贪心算法的解就是最优解。要会判断一个问题能否用贪心算法来计算。 ''' 贪心算法例子1: 找零n元钱,面额100
阅读全文
摘要:二叉树的概念: 度为2的树二叉树的存储: 1、线性存储:适用于完全二叉树 2、链式存储:适用于所有二叉树 class BiTreeNode: def __init__(self, data): self.data = data self.lchild = None self.rchild = Non
阅读全文
摘要:数据结构: 线性结构,元素存在一对一的关系,例如列表树结构,元素存在一对多的关系,例如层级结构图结构,元素存在多对多的关系,例如地图 列表: 列表:1、列表中的元素是怎么存储的?是顺序存储的,是一块连续的内存2、列表的操作:按下标查找,插入元素,删除元素先说C中的数组:查找的时间复杂度是O(1),因
阅读全文
摘要:希尔排序: 希尔排序(shell_sort)希尔排序是一种分组插入排序算法。首先取一个整数d1=n//2,将元素分为d1个组,每组相邻元素之间距离是d1,在各组内进行直接插入排序取二个整数d2=d1//2,重复上述分组排序过程,直到di=1,即所有元素在同一组内进行直接插入排序希尔排序每趟并不使某些
阅读全文
摘要:快速排序: ''' 快速排序:时间复杂度O(nlog2n) 利用归位函数进行递归调用 归位函数-左边都是比某元素小的,右边都是比某元素大的 快速排序至少比传统排序快100倍以上 快排弱点: 1.递归,比较消耗系统资源 2.最坏情况,如果一个倒序列表,时间复杂度O(n²),可以在归位前,随机选择一个数
阅读全文
摘要:冒泡排序: ''' 冒泡排序:时间复杂度O(n²) 相邻两个数比较 一趟冒一个最大(或最小)的数到最上面 每一趟无序区减少一个数,有序区增加一个数 ''' def bubble_sort(li): for i in range(len(li) - 1): # 冒泡n-1次排序完成 flag = Fa
阅读全文
摘要:'''线性查找: 从头至尾依次匹配。时间复杂度为O(n)'''def linear_search(li, val): for index in range(len(li)): if val == li[index]: return index return None列表的index()方法使用的线性
阅读全文
摘要:''' 问题: 有三个柱子A、B、C。移动n个盘子从 A -> C 分析: 步骤1: 移动前n-1个盘子 A -> B 步骤2: 移动第n个盘子 A -> C 步骤3: 移动前n-1个盘子 B -> C 实验: (n个盘子从上到下编号:1, 2, 3,...,n) n=2: move 1 A ->
阅读全文
摘要:用什么衡量一个算法的运行快慢? - 用时间是不行的。因为机器不同运行时间也不同,循环次数不同,时间也不同。 - 而且要能通过代码大概分析出不同算法的运行快慢 时间复杂度比空间复杂度重要
阅读全文
摘要:查找list中重复项及索引 def get_group_dict(distinct_list, offset=0): ''' 找出列表中所有相同的项及索引 :param distinct_list: 给定的有重复项的列表 :param offset: 偏移量即索引起始值 :return: {'重复项
阅读全文
|