首页 / 知识
关于数据结构:如何有效跟踪集合中的最小元素?
2023-04-13 14:17:00

How do I efficiently keep track of the smallest element in a collection?关于编程的问题:假设存在一组可以相互比较并排序的对象。在添加对象和偶尔删除当前最小元素时,跟踪集合中最小元素的最有效方法是什么? 使用最小堆是最好的方法。 http://en.wikipedia.org/wiki/Heap_data_structure 这是为此应用程序量身定制的。 偶尔删除斐波那契堆的速度甚至比最小堆快。插入为O(1),找到最小值也为O(1)。去除为O(log(n)) @Harpreet 您想在Binary搜索树上阅读。 MS有一个很好的起点。但是,如果您想深入研究,您可能想要一本类似算法入门的书(Cormen,Leiserson,Rivest,Stein)。 如果需要随机插入和移除,最好的方法可能是排序数组。插入和删除应为O(log(n))。 取决于您需要容器支持哪些操作。如果您可能需要在任何给定时间删除min元素,则min-heap是最好的方法,尽管有些操作是不重要的(在某些情况下,摊销log(n)时间)。 但是,如果您只需要从正面/背面进行推入/弹出操作,则可以使用一种思维方式,为所有操作(包括findmin)实现摊销固定时间。您可以进行Scholar.google.com搜索以了解有关此结构的更多信息。最近,我和一个朋友合作,达成了一个更容易理解和实现的思维方式。如果这是您要查找的内容,我可以为您发布详细信息。 Harpreet:
这不取决于集合的实现吗?如果它像一个链表那样工作,则插入将为O(1),而如果像一个数组那样实现,则插入将是线性的,正如您所说。
是的,但是您需要对每个插入片段和(也许)每个删除进行重新排序,正如您所说的那样,它是O(log(n))。 使用Harpreet提出的解决方案:
因此,这取决于。这些算法中的一种对于删除很少的大量插入用例会更好,但另一种总体上更一致。我认为我会默认使用Harpreet的机制,除非我知道会经常删除最小的数字,因为这暴露了该算法的弱点。 |
最新内容
相关内容
linux做路由跟踪命令?
linux做路由跟踪命令?,网络,系统,地址,设备,信息,电脑,工作,命令,服务,全球,linux查找网络配置命令是什么?1、首先在电脑上打开Linux系统,然后linux开启命令跟踪?
linux开启命令跟踪?,系统,信息,软件,对比,工具,发行,通信,实时,状态,最新,如何在Linux用户和内核空间中进行动态跟踪1、如果在一开始就需要查linux跟踪路由器命令?
linux跟踪路由器命令?,网络,地址,系统,信息,情况,工具,时间,通信,命令,管理人员,在路由器和Linux系统中,用来跟踪网络路径的命令是什么?命令格网络跟踪命令linux?
网络跟踪命令linux?,网络,地址,工具,系统,时间,数据,下行,信息,设备,基础,linux为了确定网络层经过的路由器数目应用什么命令发现到达目标网络linux跟踪网关命令?
linux跟踪网关命令?,地址,网络,系统,信息,电脑,时间,设备,名字,命令,数据,在linux下如何查IP及网关1、打开linux服务器,然后在桌面的空白处点击linux的跟踪路由命令?
linux的跟踪路由命令?,信息,网络,系统,通信,命令,路由,指令,网关,两个,方法,查看linux系统的路由命令是什么?1、route print 是Windows操作系linux跟踪命令工具?
linux跟踪命令工具?,工具,系统,分析,信息,状态,综合,情况,环境,命令,数据,Linux系统下常用性能分析工具top命令,怎么详解?TIME+ :任务启动后到路径跟踪命令linux?
路径跟踪命令linux?,系统,地址,工作,设备,标准,信息,命令,概念,网络,数据,linux中find命令的使用方法有哪些?1、Linux find命令用来在指定目录python创建一个集合?
python创建一个集合?,异常,代码,括号,元素,函数,方法,两个,整数,操作,字符串,在Python中,集合是一种无序且不重复的数据类型,可以用于存储一组元pythonPandas Series对象有哪些属
pythonPandas Series对象有哪些属性?,工具,数据,数字,分析,培训,属性,数据类型,数组,对象,索引,想必大家都知道pandas,它是基于Numpy的一种工具python是面向对象还是面向过程的
python是面向对象还是面向过程的,数据,代码,基础,形态,培训,术语,设计,对象,过程,语言,Python虽然是解释型语言,但从设计之初就已经是一门面向实现Python对象的持久化存储
实现Python对象的持久化存储,数据,对象,系统,函数,培训,标准,环境,管理,参数,文件,Python中有个序列化过程叫作pickle,它能够实现任意对象与文