Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中查找最小和最大元素_Python_Algorithm - Fatal编程技术网

在Python中查找最小和最大元素

在Python中查找最小和最大元素,python,algorithm,Python,Algorithm,假设我正在维护一组整数(将动态添加/删除,并且这些整数可能有重复的值)。我需要有效地找到当前元素集的max/min元素。想知道是否有更好的解决方案 我当前的解决方案是维护一个最大堆和一个最小堆。我正在使用Python2.7.x并为任何第三方pip插件开放,以解决我的问题 最小值(输入列表) 将生成列表中的最小值,并且 最大值(整数列表) 将产生列表中的最大值 希望这有助于 最小值(输入列表) 将生成列表中的最小值,并且 最大值(整数列表) 将产生列表中的最大值 希望对…有所帮助。只需使用和功能即

假设我正在维护一组整数(将动态添加/删除,并且这些整数可能有重复的值)。我需要有效地找到当前元素集的max/min元素。想知道是否有更好的解决方案

我当前的解决方案是维护一个最大堆和一个最小堆。我正在使用Python2.7.x并为任何第三方pip插件开放,以解决我的问题

最小值(输入列表)

将生成列表中的最小值,并且

最大值(整数列表)

将产生列表中的最大值

希望这有助于

最小值(输入列表)

将生成列表中的最小值,并且

最大值(整数列表)

将产生列表中的最大值

希望对…有所帮助。

只需使用和功能即可。维护堆没有任何意义。如果要在添加和删除元素时多次执行此操作(获取最小值/最大值),则需要最小值/最大值堆

不要忘记,要构建一个堆,您需要花费O(n)个时间,其中常数是2(据我记忆所及)。只有这样,您才能使用它的
O(log(n))
时间来获取您的最小值/最大值


p.S.好了,现在您已经告诉我们必须多次调用min/max,您必须创建两个堆(min heap和max heap)。构建每个堆需要
O(n)
,然后每个操作(添加元素、删除元素、查找最小值/最大值)都需要
O(日志(n))
,在这里您可以向两个堆添加/删除元素,并在相应堆上执行最小值/最大值操作

如果您在列表中使用min/max函数,那么您不需要构造任何东西,并且add将获得
O(1)
、删除
O(n)
、和min/max
O(n)
,这比heap糟糕得多

p.p.S

只需使用和功能即可。维护堆没有任何意义。如果要在添加和删除元素时多次执行此操作(获取最小值/最大值),则需要最小值/最大值堆

不要忘记,要构建一个堆,您需要花费O(n)个时间,其中常数是2(据我记忆所及)。只有这样,您才能使用它的
O(log(n))
时间来获取您的最小值/最大值


p.S.好了,现在您已经告诉我们必须多次调用min/max,您必须创建两个堆(min heap和max heap)。构建每个堆需要
O(n)
,然后每个操作(添加元素、删除元素、查找最小值/最大值)都需要
O(日志(n))
,在这里您可以向两个堆添加/删除元素,并在相应堆上执行最小值/最大值操作

如果您在列表中使用min/max函数,那么您不需要构造任何东西,并且add将获得
O(1)
、删除
O(n)
、和min/max
O(n)
,这比heap糟糕得多


p.p.S

使用排序列表可能会有所帮助。第一个元素始终是最小的,最后一个元素始终是最大的,获取值的复杂度为O(1)


使用二进制搜索添加/删除排序列表将是O(log(n))

使用排序列表可能会有所帮助。第一个元素始终是最小的,最后一个元素始终是最大的,获取值的复杂度为O(1)


使用二进制搜索添加/删除排序列表将是O(log(n))

保留两个变量
max
min
如何。并在新整数到达时保持更新?正如您所说,添加和删除是动态的。@Haris,谢谢您的建议,但我也需要动态删除元素,例如,如果删除最大元素,我需要快速找到第二个最大元素。谢谢你的建议。:)只是一个语言注释:“minimal”表示可能的最小值。你想要的是“最小值”,即你的集合中实际存在的最小值。谢谢你的修正烧杯,是的,我需要找到最小和最大的元素。如果您有更好的想法,哪一个比维护两堆更优雅/高效,请分享。:)另一个肺腑之言:你说你在维护一组“整数”。但它可能有重复的。所以用python术语来说,它实际上不是一个集合。这是一个列表。保留两个变量
max
min
怎么样。并在新整数到达时保持更新?正如您所说,添加和删除是动态的。@Haris,谢谢您的建议,但我也需要动态删除元素,例如,如果删除最大元素,我需要快速找到第二个最大元素。谢谢你的建议。:)只是一个语言注释:“minimal”表示可能的最小值。你想要的是“最小值”,即你的集合中实际存在的最小值。谢谢你的修正烧杯,是的,我需要找到最小和最大的元素。如果您有更好的想法,哪一个比维护两堆更优雅/高效,请分享。:)另一个肺腑之言:你说你在维护一组“整数”。但它可能有重复的。所以用python术语来说,它实际上不是一个集合。这是一个列表。感谢hd1,我认为它是O(n)复杂度?比我目前的堆解决方案更糟糕的是找到max/min.:)我认为OP要求的是一个比这更有效的解决方案。这基本上贯穿了整个列表。是的,@Haris主动提出了我的问题。我需要找到一个更有效的解决方案。@Lin Ma您必须用C编写自己的例程,就像min和max一样。@LinMa您发现min和max的性能特征有哪些不好?感谢hd1,我认为这是O(n)复杂性?比我目前的堆解决方案更糟糕的是找到max/min.:)我认为OP要求的是一个比这更有效的解决方案。这基本上贯穿了整个列表。是的,@Haris主动提出了我的问题。我需要找到一个更有效的解决方案。@Lin Ma你必须用C编写自己的例程,就像min和max一样。@LinMa性能如何