我已经研究排序算法几个星期了,但我的一个问题仍然没有答案:对于固定大小的和随机访问的集合,是否有最佳的顺序比较排序?大多数排序算法都适应于集合的大小,但是知道要排序的集合的大小可以为这个大小选择特定的排序算法。例如,下面的算法应该用最优比较数和最佳交换或赋值数(它是C++,但应该很容易翻译成任何语言)对三个值进行排序:
void sort3(int& x, int& y, int& z)
{
if (x < y) {
if (z < y) {
if (z < x) {
问题是:
1) I have buckets of fixed size, in my case 64. This cannot change.
2) Values vary in size, but are never bigger than a bucket (64).
3) Access is much slower if any element is split between buckets.
有没有什么算法可以计算存储桶中元素的最优顺序?
这里有两种变化,我对这两种都很感兴趣,以使代码的用户能够在速度和内存使用之间进行选择:
A) Splitting is allowed, but
我正在尝试解决间隔调度问题的一个变体:给定一组n个作业,每个作业需要1个处理单元才能完成,并且每个作业都有一个可用的间隔(可以执行的开始时间和结束时间),找出可以调度的最大作业数。
我尝试的解决方案是对作业进行排序,并始终选择可用性结束时间最早的作业,同时在每次迭代后删除不可用的作业。
while jobs are not empty:
remove jobs that are not available
find the job with earliest end_availability_time
execute the job
我使用优先级队列,在该队列中,我在开