Tag: shuffle

在使每个索引具有与任何索引相同的概率的同时对数组进行混洗

我想改组一个数组,并且每个索引都有相同的概率在任何其他索引中(不包括它自己)。 我有这个解决方案,只有我发现总是最后2个索引总是相互交换: void Shuffle(int arr[]. size_t n) { int newIndx = 0; int i = 0; for(; i > n – 2; ++i) { newIndx = rand() % (n – 1); if (newIndx >= i) { ++newIndx; } swap(i, newIndx, arr); } } 但最终可能会有一些指数再次回到第一位。 有什么想法吗? C lang。

在C中随机播放一个int数组 – 没有while循环

我想要对一个整数数组进行随机排序,数组已经排序,其大小为n,值为1 – n。 我只是想避免使用while循环以确保rand()不会给我相同的索引。 代码看起来像这样的somthin: void shuffleArr(int* arr, size_t n) { int newIndx = 0; int i = 0; for(; i < n – 1; ++i) { while((newIndx = i + rand() % (n – i)) == i); swap(i, newIndx, arr); } } for循环一直持续到n-1,因此例如在最后一次运行中它有50/50的机会等于i。 我想避免这个想法。

在SSE寄存器中随机播放偶数和奇数的vaues

我加载了两个具有16位值的SSE 128位寄存器。 值按以下顺序排列: src[0] = [E_3, O_3, E_2, O_2, E_1, O_1, E_0, O_0] src[1] = [E_7, O_7, E_6, O_6, E_5, O_5, E_4, O_4] 我想要实现的是这样的订单: src[0] = [E_7, E_6, E_5, E_4, E_3, E_2, E_1, E_0] src[1] = [O_7, O_6, O_5, O_4, O_3, O_2, O_1, O_0] 你知道是否有一个很好的方法(使用SSE内在函数直到SSE 4.2)? 我现在卡住了,因为我不能在128位寄存器的上半部分和下半部分之间移动16位值。 我发现只有_mm_shufflelo_epi16和_mm_shufflehi_epi16内在函数。 更新: 感谢Paul,我曾考虑将epi8内在函数用于16位值。 我的解决方案如下: shuffle_split = _mm_set_epi8(15, 14, […]