Python 中数据结构的运行时复杂性

在本文中,我们将研究与编程算法相关的不同类型的运行时复杂性。我们将研究时间和空间复杂性、不同的案例场景以及特定的时间复杂性。我们还将查找不同 python 操作的时间复杂度。

编程中的运行时复杂度是什么意思?

应用算法时,每个数据结构都会执行各种操作。诸如迭代一组元素、在组中的特定位置添加项目、删除、更新或生成元素或整个组的克隆等操作。这些操作只是一些基本和一般操作。我们在编程中使用的所有类型的数据结构都会对应用程序的性能产生重大影响。这是因为数据结构操作过程具有不同的时间和空间复杂度。

1. 空间的复杂性

术语“空间复杂度”表示算法可以占用的大小或内存空间的数量。它包括辅助空间以及由作为输入提供的数据占用的空间。
算法所需的附加空间或无常空间被表示为辅助空间。
算法所消耗的关于输入大小的总空间被称为其空间复杂度。

2. 时间的复杂性

当操作花费的时间通过测量来知道完成所需过程需要多长时间时,则将其表示为时间复杂度。它通常表示为“O”或 Big-O 符号,用于量化时间复杂度。根据输入大小来计算进程能力的方法称为“O”或 Big-O 表示法。

根据输入大小计算操作效率的方法称为 Big-O 表示法。

类型:

在这里,我们将讨论不同类型的运行时复杂性:

恒定时间或 O(1)

我们要查找的第一个复杂性就是这个。当算法占用的时间与输入元素无关时,该算法表示为 O(1) 或常数时间 (n)。

这里,无论输入集合的大小如何,完成一个操作所需的时间的度量都是一致的。这意味着无论处理的输入组件的数量如何,算法的操作过程将持续花费相同的时间。例如,读取一个系列的第一个成员始终是 O(1),无论该系列有多大。

对数时间或 O(log n)

我们要查找的第二个复杂性是这种类型的过程,其中作为输入提供的数据随着过程的每个阶段的通过而减少,这里讨论的算法具有对数时间复杂度。一般来说,O(log n) 过程涉及二叉树和二分搜索等算法。

线性时间或 O(n)

我们将评估的第三个过程是,当算法所花费的时间与作为输入提供的数据量的大小之间存在直接且线性的关系时,则它具有线性时间复杂度。在这个特定场景中,算法需要评估输入数据中的所有对象,这使其成为最合适的时间复杂度。

拟线性时间或 (n log n)

在这种情况下,输入元素也具有对数时间复杂度,但各个过程被分为几个部分。合并排序、蒂姆排序或堆排序等排序操作是最佳排序算法的几个实例。
作为输入提供的数据被分成许多子列表,直到每个子列表中留下单个元素,然后这些子列表被合并成一个有组织的列表。结果,时间复杂度为O(nlogn)。

二次时间或 O(n^2)

第五和第六过程本质上相似,但幅度却截然不同。这里操作所花费的时间与作为组中存在的输入提供的数据的平方进行比较,因此该过程的时间复杂度是二次的。当算法需要对输入数据的每个元素执行线性时间运算时,时间复杂度取决于元素的平方。例如,冒泡排序的复杂度为 O(n2)。

指数时间或 O(2^n)

当算法的扩展随着输入数据集的每次添加而增加一倍时,据说它具有指数时间复杂度。在第六个过程中,算法的扩展随着输入数据组的每次累加而增加一倍,其时间复杂度表示为指数。暴力方法以具有这种级别的时间复杂度而闻名。例如,我们可以发现斐波那契数的递归计算的时间复杂度为 O(2 n)。

阶乘时间 (n!)

我们要关注的最后一个过程讨论了计算操作中可能的每种变化所需的时间,该时间是输入集合中对象大小的阶乘,因此该过程表示为 (n!) 复杂度。
例如,Heap 算法计算 n 个对象的所有可能变化。所有算法的性能都非常慢,时间复杂度为 O(n!)。

运行时复杂性

数据结构时间复杂度的情况类型:

最佳案例场景: 最佳案例场景:我们在最佳案例研究中确定算法执行时间的较低圈数。当组中的数据结构和对象以及参数都处于最佳水平时,就会发生最好的情况。因此,仅进行小规模操作。例如,在线性搜索中,最好的情况可能是当x(搜索的对象)出现在列表的顶部时。在最好的情况下,操作的数量保持不变(不依赖于输入元素的数量)。因此,在这种情况下,它的时间复杂度为 O(1)。

平均情况:当我们将复杂性描述为依赖于作为输入提供的数据及其分布的均匀程度时,就会发生这种情况。我们考虑所有潜在的输入,并计算在平均情况分析中计算所有这些输入所需的时间。要找到答案,只需将输入数量除以所有计算值的相加积即可。

最坏的情况:涉及定位大型组(例如列表)中最后一项的项目的过程,其中算法从第一项开始在整个组中迭代。例如,当 x 不存在于列表中时,类似于线性搜索的算法会在迭代中将 x 与所有条目进行比较。这将导致运行时间为 O(n)。

python中不同数据结构的时间复杂度:

集合的复杂性
大多数字典操作都是 O(1)

结论

希望本文能帮助您了解不同的时间复杂度以及哪种Python数据结构占用了多少时间复杂度。了解复杂性的基本概念后,现在您可以找到数据结构的时间复杂性并观察操作序列的复杂性。