我需要一种算法,它从 3d 数组中获取一些随机元素并将它们的值设置为零,然后无法选择一个被挑选的元素,它一直持续到特定数量的元素设置为零。我知道一些需要大量内存和操作的方法。但我需要一些可以用最少的操作功能来做到这一点的东西。非常感谢。哦...忘了说语言是Objective-C。
问问题
61 次
2 回答
0
假设数组中只允许使用非零元素,则使用以下算法
-(void) randZeroMaker:(NSMutableArray*)array withNumberElements:(NSInteger*)count {
while(count > 0){
int x = randGen(array.length);
int y = randGen([array objectAtIndex:0].length);
int z = randGen([[array objectAtIndex:0] objectAtIndex:0].length);
if ( [[[array objectAtIndex:x] objectAtIndex:y] objectAtIndex:z] == 0 ) {
[[[array objectAtIndex:x] objectAtIndex:y] objectAtIndex:z] = 0;
count--;
}
}
}
如果我错了,请纠正我!
这是空间上的 O(1) 和时间上的 O(count + k)。我认为这是最好的。
于 2013-03-07T11:28:37.857 回答
0
NSMutableArray *alreadyPicked=[NSMutableArray new];
NSInteger loop=0;
while(loop<=array[0].count+array[1].count+array[2].count){
NSInteger index0D=arc4random()%array[0].count;
NSInteger index1D=arc4random()%array[1].count;
NSInteger index2D=arc4random()%array[2].count;
// pickedElement
array[index0D][index1D][index2D]=0;
NSString *temp=[NSString stringWithformat:@"%d,%d,%d",index0D,index1D,index2D];
if(![alreadyPicked containsObject:temp]){
[alreadyPicked addObject:temp];
loop++1;
}
}
于 2013-03-07T11:35:01.173 回答