python封装的概念,python封装函数的好处
算法的五个特征
输入:算法有0个或0个以上的输入和输出:算法至少有一个或一个以上的输出是有限的:算法在有限的步数后会自动结束,不会出现无限循环,每一步都能在可接受的时间内完成的确定性:算法中的每一步都有明确的意义,不会出现歧义可行性:算法的每一步都是可行的,也就是说每一步都可以执行有限的次数来完成算法效率的描述。
基本操作总数*基本操作时间~=运行时间
基本操作功能-渐进功能
O (n)-n规模的问题
时间复杂度的几个基本计算规则
基本运算,即只考虑常数项,其时间复杂度为O(1)序列结构。时间复杂度用加法计算,分支结构用乘法计算。在以取最大时间复杂度来判断一个算法的效率时,我们往往只需要注意运算次数的最高项,其他的次项和常数项可以忽略。除非另有说明,我们分析的算法的事件复杂度是指最坏的时间复杂度。
时间复杂度消耗的时间
O(1)O(logn)O(n)O(nlogn)O(N2)O(n3)O(2n)O(n!)O(nn)
Timeit模块
上课时间到。计时器(stmt=通过,setup=通过,timer=)
Timer是一个衡量一小段代码执行速度的类。
stmt参数是要测试的代码语句;
Setup参数是运行代码时所需的设置;
定时器参数是一个定时器函数,与平台相关。
计时器。计时器。Timeit (number=1000000)默认为100w次。
像图B这样的序列表也叫实际数据的索引,是最简单的索引结构。
表格的两种基本实现形式
在集成结构中,存储表信息的单元和元素存储区以连续的方式排列在存储区中,这两部分数据的整体形成一个完整的顺序表对象。
集成结构完整性强,易于管理,但由于数据元素存储区是表对象的一部分,所以在创建顺序表后,元素存储区是固定的。
在分离结构中,只有与整个表相关的信息(即容量和元素数量)存储在表对象中,而实际的数据元素存储在另一个独立的元素存储区中,该存储区与基本表对象相链接。
链表
定义链表
链表是一种常见的基本数据结构,是一种线性表。但它不像顺序表那样连续存储数据,而是在每个节点(数据存储单元)中存储下一个节点的位置信息(即地址)。
单向链接列表
单向链表,也叫单链表,是链表最简单的形式。它的每个节点包含两个字段,一个信息字段(元素字段)和一个链接字段。这个链接指向链表中的下一个节点,而最后一个节点的链接字段指向一个空值。
元素字段elem用于存储特定数据。
域next用于存储下一个节点的位置(python中的标识)
变量p指向链表头节点的位置,链表中的任何节点都可以从p中找到.
双向链表结构
更复杂的链表是“双向链表”或“双向链表”。每个节点有两个链接:一个指向前一个节点,当这个节点是第一个节点时,它指向一个空值;另一个节点指向下一个节点,当这个节点是最后一个节点时,它指向一个空值。
数据结构和算法
冒泡排序(记忆)
比较相邻的元素。如果第一个比第二个大(按升序),就把两个都交换。
对每一对相邻的元素做同样的工作,从第一行的开始到最后一对的结束。这一步完成后,最后一个元素将是最大的数字。
对除最后一个元素之外的所有元素重复上述步骤。
一次对越来越少的元素重复上述步骤,直到没有更多的数字可以比较。
时间复杂度
最佳时间复杂度:O(n)
平均时间复杂度o(n ^ 2)
最坏时间复杂度:o(n ^ 2)
稳定性:不稳定
备注:N小时更好。
选择排序法
首先,在未排序的序列中找到最小(最大)的元素,并将其存储在已排序序列的开头。然后,继续从剩余的未排序元素中寻找最小(最大)的元素,并将其放在排序后的序列的末尾。依此类推,直到所有元素都被排序。
排序的主要优势与数据移动有关。如果元素处于正确的最终位置,它将不会被移动。选择一次交换一对元素,至少有一个会移动到它的最终位置,所以对n个元素的表排序总共最多可以做n-1次。在所有完全依靠交换来移动元素的排序方法中,算术排序是非常好的一种。
时间复杂度
最佳时间复杂度:o(n ^ 2)
平均时间复杂度:o(n ^ 2)
最坏时间复杂度:o(n ^ 2)
稳定性:不稳定
备注:N小时更好。
插入排序
它的工作原理是构造一个有序序列,在有序序列中从后向前扫描未排序的数据,找到对应的位置并插入。在排序的实现中,从后向前扫描的过程中,需要反复使排序后的元素越来越粗,为最新的元素提供插入空间。
时间复杂度
最佳时间复杂度:O(n)
平均时间复杂度:o(n ^ 2)
最坏时间复杂度:o(n ^ 2)
稳定性:稳定性
备注:大部分都按顺序的时候就好了。
谢尔分类
希尔排序也是一种插入排序。也称为减少增量排序,它是直接插入算法的一个更有效和改进的版本。希尔排序是一种不稳定的排序算法。这种方法以DL命名。壳牌是在1959年提出的。Hill排序是将记录按一定的增量分组,用直接插入排序算法对每组进行排序。随着增量主键的减少,每个组包含的关键字越来越多。当增量减少到1时,整个文件刚好被一组争议,算法终止。
时间复杂度
最佳时间复杂度:O(nlogn)
平均时间复杂度:o (nlogn) ~ o (n 2)
最坏时间复杂度:o(n ^ 2)
稳定性:不稳定
备注:与步长有关。
快速排序(记忆)
也叫分区交换排序,通过一次排序把要排序的数据分成两个独立的部分,一部分的所有数据都小于另一部分的所有数据。然后用这种方法对两部分数据进行快速排序,整个排序过程可以递归进行,使整个数据一次性成为有序序列。
这些步骤是:
1.从序列中挑出一个元素,成为“支点”。
2。对数列重新排序,所有小于参考值的元素放在参考值的前面,所有大于参考值的元素放在参考值的后面(相同的数字可以去两边)。在这个分区结束后,基准位于系列的中间。这称为分区操作。
3.递归排序小于参考值的元素子系列和大于参考值的元素子系列。
在递归的最底层,序列的大小是零或一,也就是一直排序下去。虽然一直在递归,但这个算法总会走到尽头,因为在每次迭代中,它至少会把moth元素放到最后一个位置。
时间复杂度
最佳时间复杂度:O(nlogn)
平均时间复杂度:O(nlogn)
最坏时间复杂度:o(n ^ 2)
稳定性:不稳定
注意:N大的时候更好。
合并分类
合并是分而治之法的典型应用。排序的思想是先递归分组数组,然后合并数组。
将数组分解到最小值后,再舒服地排列两个有序数组。基本思路是比较两个数组的前本,谁最小谁先拿。取了之后,对应的指针会后移一位。然后比较,直到一个数组为空,最后复制另一个数组的剩余部分。
时间复杂度
最佳时间复杂度:O(nlogn)
平均时间复杂度:O(nlogn)
最坏时间复杂度:O(nlogn)
稳定性:稳定性
注意:N大的时候更好。
搜索
几种常见的方法:顺序搜索、二分法搜索、二叉树搜索和哈希搜索。
二进位检索
二分搜索法,又名二分搜索法,比较次数少,平均表现好。它的缺点是要检查的列表是有序的,很难插入和删除。
树和树算法
树是一种抽象数据类型(ADT)或实现这种抽象数据类型的数据结构,用于模拟具有树结构性质的数据集。它是由n(n=1)个有限节点组成的层次集合。它被称为“树”,因为它看起来像一棵颠倒的树,也就是说,它的根朝上,叶子朝下。它具有以下特点:
每个节点有零个或多个子节点;
没有父节点的节点称为根节点;
每个非根节点只有一个父节点;
除了根节点,每个字节点可以分成多个不想交叉的子树;
森林:由m (m "=0)棵不相交的树组成的集合称为森林。
树的存储和表示
一些常见的树应用程序场景
二叉树
二叉树的基本概念
二叉树是一种树结构,其中每个节点最多有子树。通常子树被称为“左子树”和“右子树”
二叉树的性质(特征)
1:在二叉树的第I层上最多有2 (i-1)个节点(i0)。
性质:比K更好阅读的二叉树最多有2 k-1个节点(k0)
3:对于任意二叉树,若其叶节点树为N0,度为2的节点总数为N2,则N0=N21
属性:具有n个节点的完整二叉树的深度必须是log2(n-1)
5:对于一棵完整的二叉树,如果从上到下,从左到右编号,编号为I的节点必有其左子编号2i,右子编号2i1父代的个数必须是i/2(i=1是根,除外)
二叉树的遍历
树的遍历是树的一个重要操作。遍历是指访问树中所有节点的信息,即树中每个节点依次访问一次,且只访问一次。我们称这种访问为所有节点的遍历。然后树的两种重要遍历模式是深度优先遍历和广度优先遍历。深度优先一般使用递归,广度优先一般使用队列。一般来说,大部分可以递归实现的算法也可以通过堆栈实现。
那么深度遍历有三个重要的方法。这三种方法通常用于访问树的节点。两者的区别在于访问每个节点的顺序不同。这三种遍历称为前序遍历、中序遍历和后序遍历。
前序遍历
在前序遍历中,先访问根节点,然后递归使用前序遍历访问左子树,再递归使用前序遍历访问右子树。
有序遍历
在中序遍历中,我们递归地使用中序遍历来访问左边的子树,然后是根节点,最后递归地使用中序遍历来访问右边的子树。
后序遍历
在后序遍历中,我们首先递归地使用后序遍历来访问左子树和右子树,最后访问根节点。
广度优先遍历(层次遍历)
从树根开始,从上到下,从左到右,遍历整棵树的节点。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。