3D 配列からいくつかのランダムな要素を取得し、それらの値をゼロに設定するアルゴリズムが必要です。その後、選択された要素の 1 つを選択する可能性がなければ、特別な量の要素がゼロに設定されるまで続きます。多くのメモリと操作を必要とするいくつかの方法を知っています。しかし、私は最小限の操作機能でそれを行うことができるものが必要です。どうもありがとう。ああ...言語がObjective-Cであることを忘れていました。
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 に答える