【发布时间】:2023-03-20 20:59:01
【问题描述】:
我有一个物品清单;我想对它们进行排序,但我想要一个小的随机元素,所以它们不是严格按顺序排列的,只是平均排序。
我怎样才能最有效地做到这一点?
我不介意随机的质量不是特别好,例如它只是基于输入的机会排序,例如提前终止的不完全排序。
上下文通过引入一个非常轻微的不精确元素来实现近乎贪婪的搜索;这是一个紧密的循环,因此要考虑排序和调用random() 的速度
我当前的代码是做一个std::sort(这是C++),然后在数组的早期部分做一个非常短的洗牌:
for(int i=0; i<3; i++) // I know I have more than 6 elements
std::swap(order[i],order[i+rand()%3]);
【问题讨论】:
-
排序列表,然后移动一些元素?
-
想问:为什么? - 你不能使用你选择的现有排序算法,然后通过提前退出来“打破它”吗?
-
您是否希望该方法比完整排序更有效?换句话说,sort-then-slightly-permute 是一个可接受的解决方案吗?
-
我会对列表进行排序,然后在其元素之间进行一些随机数的随机交换。
-
@Will 我认为我的建议不值得成为一个真正的答案,因为这是最幼稚的做法,其效率分析是微不足道的。
标签: c++ algorithm sorting random