当前位置: 首页 > 科技观察

Python数据结构的时间复杂度

时间:2023-03-20 20:45:31 科技观察

摘要本文介绍了CPython中数据结构关键操作的大O表示法。大O表示法本质上是一种衡量操作时间复杂度的方法。本文还说明了列表、集合和字典的许多常见操作。为您的算法设计和选择正确的数据结构至关重要。希望能帮到你。为什么我们需要知道时间复杂度?对于数据科学家程序员来说,为工作选择正确的数据结构至关重要。特别是,如果算法是计算密集型的,例如训练机器学习模型或处理大量数据的算法,则必须特别注意确保选择合适的数据结构。选择正确的数据类型常常被忽视,最终可能会严重影响应用程序的性能。本文目的本文介绍CPython中数据结构关键操作的Big-O表示法。大O表示法是一种衡量操作时间复杂度的方法。1.让我们了解BigOnotation是什么意思?许多操作都是在算法中执行的。这些操作可能包括遍历集合、复制项或整个集合、将项附加到集合、在集合的开头或结尾插入项、删除项或更新集合中的项。Big-O衡量算法操作的时间复杂度。它测量算法计算所需操作所需的时间。虽然我们也可以衡量空间复杂度(算法占用多少空间),但本文将重点关注时间复杂度。用最简单的术语来说,大O表示法是一种根据输入的大小(称为n)衡量操作性能的方法。2.BigO表示法有何不同?我们需要熟悉许多常见的BigO表示法。让我们将n视为输入集的大小。在时间复杂度方面:O(1):无论你的集合有多大,执行一个操作所花费的时间都是常数。这是常数时间复杂度表示法。这些操作尽可能快。例如,检查集合中是否存在任何项目的操作是O(1)操作。O(logn):执行一个操作所花费的时间随着集合大小的增加呈对数增长。这是对数时间复杂度表示法。潜在优化的搜索算法是O(logn)。O(n):执行一个操作所需的时间与集合中的项数成线性比例。这是线性时间复杂度表示法。就性能而言,这介于两者之间或中间。例如,如果我们想对一个集合中的所有项目求和,那么我们将不得不遍历该集合。因此,对集合的迭代是一个O(n)操作。(nlogn):执行操作的性能是集合中项数的拟线性函数。这称为准线性时间复杂度表示法。最优排序算法的时间复杂度通常为n(logn)。O(nsquared):执行一个操作所需的时间与集合中项目的平方成正比。这称为二次时间复杂度表示法。(n!):当在操作中计算集合的每个单独排列时,执行操作所需的时间取决于集合中项目的大小。这称为阶乘时间复杂度表示法。非常慢。此图像概述了Big-O符号。O(1)很快。O(n平方)很慢。O(n!)非常慢。大O符号是相对的。大O表示法与机器无关,忽略常量,并被包括数学家、技术专家、数据科学家等在内的广大受众所理解。最佳、平均、最坏情况当我们计算一个操作的时间复杂度时,我们可以根据最佳、平均或最坏情况。BestCaseScenario:顾名思义,这是集合中的数据结构和项目以及参数处于最佳状态的场景。例如,假设我们要在集合中查找一个项目。如果该项目恰好是集合的第一项,那么这是此操作的最佳情况。平均情况根据输入值的分布来定义复杂性。最坏的情况可能是需要查找大型集合(如列表)中最后一项的操作,并且算法从第一项开始迭代集合。Python集和时间复杂度在本文的这一部分,我将记录CPython中的常见集,然后概述它们的时间复杂度。我将特别关注一般情况。1.ListList是迄今为止Python中最重要的数据结构之一。我们可以将列表用作堆栈(最后添加的项是第一项)或队列(添加的第一项是第一项)。列表是有序且可变的集合,因为我们可以随意更新项目。让我们回顾一下常见的列表操作和它们的Big-O表示法插入:Big-O表示法是O(n)获取项目:Big-O表示法是O(1)删除项目:Big-O表示法是O(n)迭代:Big-OO表示法是O(n)获取长度:Big-O表示法是O(1)JoshuaSortino在Unsplash上拍摄的照片2.Set集合也是Python中使用最广泛的数据集合之一。集合本质上是无序的集合。集合不允许重复,因此集合中的每个项目都是唯一的。集合支持许多数学运算,如并集、差集、集合的交集等。让我们回顾一下通用的Set操作来检查集合中的项目:Big-O表示法是O(1)集合A和集合B之间的区别:Big-O表示法是O(lengthofA)notation是O(minimumofthelengthofAorB)集合A和B的并集:关于length(A)+length(B),它的Big-Onotation是O(N)fabioonUnsplash3.Dict照片3上的词典最后,我想提供一个词典数据收集的概述。字典是键值对的集合。键在字典中是唯一的,以防止项目冲突。这对于数据收集非常有用。字典由键索引,其中键可以是字符串、数字甚至是字符串、数字或元组的元组。我们可以对字典进行很多操作,比如存储一个key的值,或者根据一个key检索一个item,或者遍历item等等。我们来回顾一下常见的字典时间复杂度:这里我们认为key是用来获取,设置或删除一个项目。获取项目:大O表示法的O(1)设置项目:大O表示法的O(1)删除项目:大O表示法的O(1)迭代字典:大O表示法的O(1)(n)NASA在Unsplash上拍摄的照片