我有二维数组。我想随机选择一个插槽,并继续这样做,直到我最终选择了所有插槽(因此对于最后一个选择当然没有随机选择),从不选择相同的插槽两次。有这样一个众所周知的算法吗?我使用C#,但显然这比任何特定的平台更关心算法。是的,'大书'在我的购买清单:)随机绘图算法
随机绘图算法
回答
使用Fisher-Yates shuffle算法之前(在O(n)的时间)
int X = 3; int Y = 4;
int[] array = new int[X * Y];
for (int i = 0; i < array.Length; i++) array[i] = i;
FisherYatesShuffle(array);
var randomSlots = array.Select((i,j) => new {x=array[j]%X , y=array[j]/X })
.ToArray();
public static void FisherYatesShuffle<T>(T[] array)
{
Random r = new Random();
for (int i = array.Length - 1; i > 0; i--)
{
int j = r.Next(0, i + 1);
T temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
看看。它旨在从一组中随机排列。
假设你的数组是这样的:
Random rand = new Random();
object[,] array = new object[width,height];
bool[,] chosen = new bool[width,height];
int i, j;
do
{
i = rand.Next(width);
j = rand.Next(height);
} while (chosen[i,j]);
chosen[i,j] = true;
object current = array[i,j];
这应该很好地工作。
谢谢,比上面的递归解决方案好,但我们仍然会越来越多地循环,因为我们走向集合的尽头。也许这只是一个不可避免的问题? – 2012-03-04 19:32:14
@MylesMcDonnell我不认为这是可以避免的,你的编辑打破了代码的功能。它不应该是'!',如果选择设置为true,则该索引无效。我已将代码回滚。 – 2012-03-04 19:39:59
对不起你的答案;) – 2012-03-04 19:40:56
我没有这数字
list<int> PastList=new PastList<int>();
private void Choоse()
{
int i = Recurs();
PastList.Add(i);
}
private int Recurs()
{
int i;
i = rnd.Next(0, 99);
if (PastList.Contains(i))
{
i = Recurs();
}
return i;
}
这个问题是越接近我们到集合结束更多的递归发生。可能需要很多电话才能到达rnd.Next(0.99)以获取最后一个项目。哎哟。 – 2012-03-04 19:28:54
- 1. 绘图随机性
- 2. 随机数算法
- 3. 随机性算法
- 4. 随机组算法
- 5. 在随机地图中随机绘制随机圈子Android
- 6. 随机数发生器和图算法
- 7. 随机决策算法
- 8. 算法分析:随机数
- 9. 随机Prim的算法
- 10. 约随机选算法
- 11. 随机数的算法
- 12. 随机布局算法
- 13. 随机聚类算法
- 14. 在热点上随机绘图
- 15. 奇怪的随机错误,java绘图
- 16. 随机森林和随机树算法之间的区别
- 17. 绘制图的算法
- 18. 图形绘制算法
- 19. 径向绘图算法
- 20. 计算随机数
- 21. 绘制随机圆圈
- 22. Java:绘制“随机”星星
- 23. CCSpriteSheet随机崩溃绘制
- 24. TI-84 +随机数生成算法
- 25. 特殊随机算法,对PHP
- 26. 稳定的随机颜色算法
- 27. 找到一个随机数的算法
- 28. 随机选择学习卡的算法
- 29. 检测随机文件名的算法?
- 30. 随机算法概率最大化
你正在寻找一个[随机提到置换](http://stackoverflow.com/search?q=%5Bc%23%5D+random+permutation)。 – dtb 2012-03-04 19:04:04
[Random playlist algorithm]可能的重复(http://stackoverflow.com/questions/1816534/random-playlist-algorithm) – dtb 2012-03-04 19:04:57