2013-03-07 30 views
0

我需要一種算法,它從3d數組中取出一些隨機元素並將其值設置爲零,然後無法選擇拾取的元素之一,它會繼續直到特定數量的元素被設置爲零。 我知道一些需要大量內存和操作的方式。但我需要一些能夠以最少的操作功能來做到的事情。 非常感謝。 哦...忘了說這個語言是Objective-C。如何清零3d數組中的新隨機元素

+0

感謝您的回答。我要測試他們 – user21087 2013-03-09 12:47:28

回答

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; 
    } 
} 
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)。我認爲這是最好的。

+0

我認爲你的if語句是爲了!而不是== – Fonix 2013-03-07 11:39:22

+0

對於@Fonix – 2013-03-07 11:53:07