我创建了一个程序,用于查找一组数字的中位数。这组数字是动态的,可以插入和删除数字(可以输入重复数字),在此过程中,新的中位数会被重新计算并打印出来。
我使用multimap创建了这个程序,因为:
1)它已经排好序了;
2)插入、删除、搜索都很容易(因为multimap实现了二进制搜索);
3)允许重复的条目。
数字输入和删除的约束条件(表示为N)为:0 < N <= 100,000。
我编写的程序可以正常运行并输出正确的中位数,但速度不够快。我知道unsorted_multimap比multimap更快,但unsorted_multimap的问题在于我需要对其进行排序。我必须对其进行排序,因为要找到中位数,你需要有一个已排序的列表。所以我的问题是,使用unsorted_multimap然后快速排序条目是否可行,还是说这个方法荒谬无比?使用vector,对其执行快速排序,然后使用二进制搜索是否更快?或者也许我忘记了一些我甚至没有想到的神奇解决方案。
虽然我不是C++的新手,但我承认,我的时间复杂度技能有点中等水平。
看着自己的问题,我越看越觉得,只使用vector,进行快速排序和二进制搜索会更好,因为数据结构基本上已经实现了vector。
我使用multimap创建了这个程序,因为:
1)它已经排好序了;
2)插入、删除、搜索都很容易(因为multimap实现了二进制搜索);
3)允许重复的条目。
数字输入和删除的约束条件(表示为N)为:0 < N <= 100,000。
我编写的程序可以正常运行并输出正确的中位数,但速度不够快。我知道unsorted_multimap比multimap更快,但unsorted_multimap的问题在于我需要对其进行排序。我必须对其进行排序,因为要找到中位数,你需要有一个已排序的列表。所以我的问题是,使用unsorted_multimap然后快速排序条目是否可行,还是说这个方法荒谬无比?使用vector,对其执行快速排序,然后使用二进制搜索是否更快?或者也许我忘记了一些我甚至没有想到的神奇解决方案。
虽然我不是C++的新手,但我承认,我的时间复杂度技能有点中等水平。
看着自己的问题,我越看越觉得,只使用vector,进行快速排序和二进制搜索会更好,因为数据结构基本上已经实现了vector。