我创建了一个程序来查找数字列表的中位数。数字列表是动态的,因为可以删除和插入数字(可以输入重复的数字),在此期间,重新评估并打印出新的中位数。
我使用多图创建了这个程序,因为
1)它已经被排序的好处,
2)易于插入,删除,搜索(因为多图实现了二进制搜索)
3)允许重复条目。
条目数 + 删除数(表示为 N)的约束为:0 < N <= 100,000。
我编写的程序可以运行并打印出正确的中位数,但速度不够快。我知道 unsorted_multimap 比 multimap 快,但是 unsorted_multimap 的问题是我必须对其进行排序。我必须对其进行排序,因为要找到中位数,您需要一个排序列表。所以我的问题是,使用 unsorted_multimap 然后快速对条目进行排序是否可行,或者这很荒谬?只使用向量、快速排序向量并使用二分搜索会更快吗?或者,也许我忘记了一些我什至没有想到的绝妙解决方案。
虽然我对 C++ 并不陌生,但我承认,我在时间复杂性方面的技能有些平庸。
我越看自己的问题,我就越开始认为仅使用带有快速排序和二进制搜索的向量会更好,因为数据结构基本上已经实现了向量。