如何归零3d数组的新随机元素

时间:2013-03-07 11:16:41

标签: objective-c random multidimensional-array zero

我需要一个算法,它从3d数组中获取一些随机元素并将它们的值设置为零,然后无法选择其中一个被拾取的元素,它会持续到特定数量的元素设置为零。 我知道一些需要大量内存和操作的方法。但是我需要能够以最少的操作功能来做到这一点。 非常感谢。 哦...忘了说语言是Objective-C。

2 个答案:

答案 0 :(得分: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(计数+ k)。我认为这是最好的。

答案 1 :(得分: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;
    }
}