随笔分类 -  算法

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