【发布时间】:2013-03-03 08:54:19
【问题描述】:
我创建了一个程序来查找数字列表的中位数。数字列表是动态的,因为可以删除和插入数字(可以输入重复的数字),在此期间,重新评估并打印出新的中位数。
我使用多图创建了这个程序,因为
1) 已经排序的好处,
2) 轻松插入、删除、搜索(因为multimap实现了二分查找)
3) 允许重复条目。
条目数 + 删除数(表示为 N)的约束为:0
我编写的程序可以运行并打印出正确的中位数,但速度不够快。我知道 unsorted_multimap 比 multimap 快,但是 unsorted_multimap 的问题是我必须对其进行排序。我必须对其进行排序,因为要找到中位数,您需要一个排序列表。所以我的问题是,使用 unsorted_multimap 然后快速对条目进行排序是否可行,或者这很荒谬?只使用向量、快速排序向量并使用二分搜索会更快吗?或者,也许我忘记了一些我什至没有想到的绝妙解决方案。
虽然我对 C++ 并不陌生,但我承认,我在时间复杂性方面的技能有些平庸。
我对自己的问题了解得越多,我就越开始认为仅使用带有快速排序和二进制搜索的向量会更好,因为数据结构基本上已经实现了向量。
【问题讨论】:
-
我不认为地图是解决这个问题的好数据结构。最佳性能可能来自向量,尽管我没有比较两者。
-
@evanmcdonnal,我认为你可能是对的。我认为向量可能与快速排序和二进制搜索一样快。
-
我认为这个问题是重复的:stackoverflow.com/questions/1387497/…
-
@JoseLuisBlanco:这不完全是因为该系列可能正在缩小。
-
好吧,矢量比多图快,但它仍然不够快......这很奇怪。也许我正在以其他方式放慢速度。
标签: c++ big-o time-complexity binary-search multimap