python封装的概念,python封装函数的好处

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: