随笔分类 - 算法
摘要:分治法的核心思想就是分而治之,具体来说,它先将一个难以直接解决的大问题,分割成一些可以直接解决的小问题。如果分割后的问题仍然无法直接解决,那么就继续递归地分割,直到每个小问题都可解。 分治法的使用方法 几个特征 1)难度在降低,即原问题的解决难度,随着数据的规模的缩小而降低。这个特征绝大多数问题都是
阅读全文
摘要:树的机构与线性结构的区别 1)一个结构如果不空,其中就存在着唯一的起始结点,称为根(root) 2)按结构的连接关系,树根外的其余结点都有且只有一个前驱,但是一个结点可以有0个或者多个后继。在非空的树结构中一定有些结点并不连接到其他结点。这种结点与表的尾结点性质类似,但在一个数结构里可以存在多个这种
阅读全文
摘要:概述 栈和队列都是保存数据元素的容器,这就意味着可以把元素存入其中,或者从中取出元素使用。这两种结构支持的元素访问数据操作包括查看,即只是取得元素的有关信息;还包括元素弹出,即在取得元素的同时将其从容器中删除。 栈、队列和数据使用顺序 栈和队列也是最简单的缓存结构,它们只支持数据项的存储和访问,不支
阅读全文
摘要:串匹配和朴素匹配算法 t为目标串,p为模式串,字符串匹配就是在t中查找与p相同的子串的操作 朴素的串匹配算法 最简单的朴素匹配算法采用最直观可行的策略:1)从左到右逐个字符匹配;2)发现不匹配时,转去考虑目标串里的下一个位置是否与模式串匹配。 def naive_matching(t, p): m,
阅读全文
摘要:表的概念和性质 在抽象地讨论线性表时,首先要考虑一个(有穷的或无穷的)基本元素集合E,集合E中的元素可能都是某个类型的数据对象。 在一个非空的线性表里,存在着唯一的一个首元素和唯一的尾元素。除首元素之外,表中的每个元素e都有且仅有一个前驱元素;除了尾元素之外的每个元素都有且仅有一个后继元素。 线性表
阅读全文
摘要:抽象数据类型 抽象数据类型(ADT)是计算机领域中被广泛接受的一种思想和方法,也是一种用于设计和实现程序模块的有效技术。抽象数据类型的基本思想是抽象,或者说是数据抽象(与函数定义实现的计算抽象或称过程抽象对应)。 数据类型和数据构造 类型(数据类型)是程序设计领域最重要的基本概念之一。在程序里描述的
阅读全文
摘要:问题、问题实例、算法: 在考虑问题时,需要清晰的区分问题、问题实例和算法三个概念,并理解它们之间的关系。 问题:一个问题W是需要解决(需要用计算求解)的一个具体需求。例如判断任一个正整数N是否为素数,虽然可以严格定义“问题”的概念,但在这里还是想依靠读者的直观认识。总而言之,现实世界中存在许多需要用
阅读全文
摘要:复杂度是什么 复杂度是衡量代码运行效率的重要的度量因素。 计算机通过一个个程序去执行计算任务,也就是对输入数据进行加工处理,并最终得到结果的过程。每个程序都是由代码构成的。可见,编写代码的核心就是要完成计算。但对同一个计算任务,不同计算方法得到结果的过程复杂度是不一样的,这对你实际的任务处理效率就有
阅读全文
摘要:快速排序 时间复杂度:O(nlogn) def partition(li, left, right): tmp = li[left] while left < right: while left < right and li[right] >= tmp: # 从右边找比tmp小的数 right -=
阅读全文
摘要:时间复杂度:O(n ** 2) def insert_sort(li): for i in range(len(li)): temp = li[i] j = i - 1 while j >= 0 and li[j] > temp: li[j + 1] = li[j] j -= 1 li[j + 1]
阅读全文
摘要:# 选择排序 时间复杂度:O(n**2) 代码: 思路: min_loc=1记录当前列表索引为i进行替换无序区的最小值,如果比i位置的值小,用min_loc标记此位置,直到min_loc标记的位置是无序区最小的值。最后将该索引的值与min_loc标记的最小值进行换位,该趟完成......
阅读全文
摘要:# 冒泡排序 时间复杂度:O(n**2) 加一个exchange标识,如果一趟走完列表没有发生任何改变,默认为他已经是有序的,因此,直接返回!
阅读全文
摘要:# 顺序查找 时间复杂度:O(n) 代码: # 二分查找(需要排序) 时间复杂度:O(logn)
阅读全文

浙公网安备 33010602011771号