2011-03-18 4 views
0

알 수없는 크기의 다차원 배열을 플랫 한 것을 사용하여 위조 할 수 있습니까? 배열의 사용량 중 90 %가 재귀를 사용하지 않고도 더 쉽고 빠를 수있는 응용 프로그램과 배열에 약간의 깊이를 추가해야하는 단일 요구 사항이있는 응용 프로그램이 있습니다. 내가 생각할 수있는 유일한 방법은 1 차원 배열과 같을 것이다 시작 인덱스와 끝 인덱스의 실행 목록, 유지 될 것이다 :다차원 배열을 평면 배열로 가짜로 만듭니다.

[0] = 1 
[1] = 2 
[2] = 3 
[3] = 4 
[4] = 5 

을 ... 그리고 시작/끝 목록은 다음과 같이 보일 것이다 :

Start  End 
-----  --- 
[0] = 1 [0] = 2 
[1] = 3 [1] = 4 
다음과 같습니다 다중 차원 배열 표현 것이다

:

[0] = 1 
[1] = [0] = 2 
     [1] = 3 
[2] = [0] = 4 
     [1] = 5 

이 2 개 이상의 차원으로 작동합니다,하지만 그 시점에서 나는 시간을 알아내는 데 문제가 ow를 사용하여 원래의 1D 배열과 시작/끝 목록의 인덱스를 확인했습니다. 또한이 유형의 것을 찾는 데 사용할 검색어가 무엇인지 파악하는 데 어려움을 겪고 있습니다. 모든 일반적인 지침/아이디어가 인정 될 것입니다. 감사.

편집 - 일부 컨텍스트를 제공하기 위해 명령 패턴 구현에서 중첩 트랜잭션을 지원하기위한 것입니다. 1D 배열에는 명령이 포함되어 있으며 인위적인 깊이는 각 트랜잭션에 이름을 부여하기위한 것입니다. 트랜잭션이 적게 사용되기 때문에, 작은 int리스트를 재빨리 통과하는 것은 다차원 명령 배열을 반복적으로 통과하는 것보다 빠르고, 각 명령에서 하나의 명령이 있는지 여부를 확인하는 것이 더 낫습니다. 명령어들의 배열.

+2

재귀를 피할 때 얻을 수있는 이득 (그리고 왜 재귀해야할까요?)은 이러한 인공적인 '깊이'수준을 유지하는 고통에 의해 씹어 먹을 것입니다. –

+0

세 개의 개별 배열을 둘러싼 저글링이 재귀 및 실제 다차원 배열보다 더 잘 수행 될 것이라고 생각하십니까? 이 경로를 따라 가기 전에 중요한 벤치마킹을 해 주시기 바랍니다. – meagar

+0

@Marc B & @meagar : 좀 더 자세한 내용을 제공하는 편집을 참조하십시오. – Ocelot20

답변

0

일반적으로 저장 끝 위치는 중복되는 것처럼 보입니다. 배열은 다음 배열이 시작되는 곳에서 끝나지 않습니까?

둘째로, 문제는 고정 된 크기가 아니라면 추가 목록마다 추가 조회 목록이 필요하다는 것입니다. 이것이 원래 솔루션보다 더 효율적인지에 관해 나는 모른다.

+0

2D 배열의 경우 현재 배열은 다음 배열이 끝나는 곳에서 끝나지만 3D 배열에서는 배열이 두 개가 될 수 있습니다. 첫 번째 중첩 된 것이 끝나면 최상위 레벨은 끝나지 않을 것입니다. 중첩 된 두 번째 중첩 된 것이 끝날 것입니다. – Ocelot20

+0

@ Ocelot20 : 네가 맞다. 이것은 마지막 차원에만 적용된다. –

관련 문제