하스켈의 2 차원 격자에 관한 최근의 질문에 영감을 받아리스트 목록에서 위치를 추적하기 위해 2 차원 지퍼를 만들 수 있는지 궁금합니다. 목록에있는 1 차원 지퍼를 사용하면 큰 목록에서 로컬로 효율적으로 이동할 수 있습니다 (일반적인 예는 텍스트 편집기입니다).2 차원 지퍼
grid =
[[ 1, 2, 3, 4, 5]
,[ 6, 7, 8, 9,10]
,[11,12,13,14,15]
,[16,17,18,19,20]
,[21,22,23,24,25]]
우리가 효율적으로뿐만 아니라 왼쪽과 오른쪽하지만 최대 여기 그리드에서 아래로 이동 지퍼 데이터 구조의 어떤 종류를 만들 수 :하지만 우리는 이와 같은 두 번째 차원을 말할 수? 그렇다면리스트를 무한리스트로 무한리스트로 대체한다면 여전히 효율적인 운동을 할 수 있을까요?
"지퍼 작업은 그들이 도달하는 데 사용되는 경로 구조에서의 위치를 표현하는 것이 얼마나의 중요한 측면 중 하나". 왜 지퍼에 대한 고유 한 경로가 중요한 요구 사항입니까?데이터 구조에서 "위치"를 나타낼 수있는 어떤 방법이라도 충분할 것이라고 생각했을 것입니다. –
@AnupamJain : 재건하는 데 사용 된 조각은 원래의 불변 구조의 조각이므로, 그 중 하나에 "동일한" 위치를 재조정하면 해당 경로는 원래 값을 유지합니다. 이를 처리 할 수있는 유일한 방법은 두 경로를 모두 따라 가면서 두 가지 교체를 모두 수행하는 것입니다. 즉 두 경로를 함께 "고유 한"경로로 간주하는 것입니다. –
@AnupamJain : 가능한 중복 경로가 많으면 많을수록 비효율적입니다. 최악의 시나리오는 무한 개수의 경로가 있고 각 경로에 전체 구조가 포함되어있어 모든 것을 다시 작성해야하는 순환 목록과 같은 것입니다. –