2013-03-07 2 views
0

3 차원 배열에서 무작위 요소를 취하여 그 값을 0으로 설정 한 알고리즘이 필요합니다. 그 다음에는 선택된 요소 중 하나를 선택할 가능성이 없어 계속 진행됩니다. 특별한 양의 원소가 0으로 설정 될 때까지. 많은 기억과 작업을하는 몇 가지 방법을 알고 있습니다. 하지만 적어도 작동 기능을 수행 할 수있는 무언가가 필요합니다. 고마워요. 오 ... 언어가 Objective-C라고 깜빡했습니다. 비 영 요소를 가정3 차원 배열의 새로운 무작위 요소를 0으로 만드는 법

+0

답장을 보내 주셔서 감사합니다. 나는 그들을 테스트 할 것입니다 – user21087

답변

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

+0

네, 죄송합니다. @Fonix –