2013-09-20 2 views
-2

3 중첩 루프가 있습니다. 내부 값의 값은 바로 위에있는 값에 의존합니다. 성능은 실제로 지금 O (n * n * n)의 킬러입니다. 또한 immediate 루프에도 out.println이있을 수 있습니다.이 출력은 인쇄해야합니다. 재귀를 어떻게 대체 할 수 있습니까? 또는 중첩 루프를 피하고 성능을 향상시킬 수있는 다른 방법이 있습니까?중첩 루프를 재귀로 바꿉니다.

샘플 코드 :

String[] strArray = getOuterArray(); 
for(String x : strArray){ 
     String[] internalStrArray = x.getArray(); 
     System.out.println("I am in first"); 
    for(String x: internalStrArray){ 
     String[] internalinStrArray = x.getArray(); 
     System.out.println("I am in second"); 
     for(String x: internalinStrArray){ 
      System.out.println("I am in third "+ x); 
     } 
    } 
} 

public String[] getOuterArray(){ 
} 

public String[] getArray(){ 
} 
+2

재귀는 성능을 향상시키지 못할 것입니다 ... 코드가 더 작고 읽기 쉽도록 만들지 만 다른 이야기입니다. – arshajii

+2

어? n^3 번 실행해야한다면 재귀를 사용하더라도 n^3이됩니다. –

+0

왜 재귀가 O (n * n * n)을 바꿀까요? 뭔가가 있다면, 그것은 단지 당신의 스택을 태울 것입니다. – Thilo

답변

1

재귀 것은 빠른 루프 다음 ​​될 수 없습니다. 실제로 함수 호출을 스택에 푸시 (push)하기 때문에 속도가 느려질 수 있습니다.

지금 코드는 의미가 없습니다. 루프 내에서 "나는 첫 번째/두 번째/세 번째"라고 인쇄하고 있습니다. 당신은 정말로 향상시킬 수있는 산술적으로 아무것도하지 않습니다. 내가 가진 유일한 주요 제안은 모든 변수 x의 이름을 지정하지 않는 것입니다. 매우 혼란 스럽습니다.

이 세 개의 루프가 있고 그 모든 인쇄 작업을 원한다면 아무 것도 빨리 진행할 수 없습니다.

+0

"내가 가진 유일한 주요 제안은 모든 변수 x의 이름을 지정하지 않는 것입니다. 매우 혼란 스럽습니다."또한 합법적 인 Java가 아닙니다. 루프와 동일한 루프 변수를 가진 루프가 중첩 될 수 없습니다. – ajb

+0

이것은 Sysout 샘플입니다. 실제로 Sysout으로 대체 된 작은 논리가 쓰여졌습니다. 그것도 문자열 배열, 우리의 내부 프레임 워크의 개체 배열 우리가 문자열 배열 대신 사용하고 있습니다. 그냥 비슷한 논리를 복사하려고했습니다. 혼란에 대해 죄송합니다. 이러한 종류의 중첩 된 루프를 피할 가능성이 있는지 이해하고 싶습니다. – MilesToGo

+0

@ user2800970 현재 진행중인 작업에 따라 다릅니다. 검색을 수행하는 경우 이진 검색을 사용할 수 있지만 처리 할 실제 데이터를 보유하고있는 목록이있는 개체 그룹에 뭔가를 수행하는 경우에는 그 주위에 방법이없는 것처럼 보입니다. – Vulcronos