순전히 기능적인 데이터 구조에서 눈에 띄는 질문은 무엇입니까?


51

이 질문은 1998 년 오카 사키의 책이 출판 된 이후 PFDS의 새로운 기능에 대한 또 다른 질문에서 영감을 얻었습니다 .

두 가지 질문으로 시작하겠습니다.

  • 해시 테이블의 속도에 접근하는 순수 기능 집합 데이터 구조가 있습니까? 시도는 아직 없습니다.
  • O (1)가 추가 된 순전히 기능적인 핑거 트리가 있습니까? 지금까지 가장 좋은 것은 Kaplan과 Tarjan이 고안 한 O (lg lg n)입니다.

다른 순수한 기능적인 데이터 구조 문제는 무엇입니까?


시퀀스 인 키가있는 일반적인 사전보다는 해시 트리에서 시도하는 것을 의미합니까? FWIW, 나는 좋은 오래된 해시 테이블에 접근하는 것이 불가능하다고 생각합니다.
Jon Harrop

답변:


19

나는 그 질문을 다소 자유롭게 해석 할 것이다. 오카 사키 스타일의 데이터 구조에서 메모는 실행 시간에 부작용이있는 암시 적 돌연변이의 한 형태입니다. 따라서 순전히 기능적인 구현을 가진 데이터 구조보다는 엄격한 의미의 영구 데이터 구조에 관한 질문을 할 것입니다. 엄밀히 말하면 벌칙없이 데이터 구조의 이전 버전에 액세스 할 수 있어야하며 버전 트리는 임의로 분기 할 수 있습니다.

그런 맥락에서, 지속적인 UNION-FIND는 중요한 개방형 문제라고 생각합니다. 다른 실에서 언급 된 Conchon-Filliâtre 논문이 있습니다. 한 제안자는 이미 소위 영구 배열과 관련된 문제를 제기했습니다. 실제로는 반영구적입니다. 그러나 최악의 (그리고 논쟁의 여지가있는 평균) 경우에는 더 잘 작동하지만 가장 좋은 경우에는 더 나쁜 해시 트리 또는 다른 영구적 배열로 대체한다고 가정하십시오. 그래도 중요한 문제는 여전히 열려 있습니다.

이 논문은 Coq.의 정확성에 대한 공식적인 증거를 제공합니다. 그러나 그들은 공식적으로나 비공식적으로 상각 된 복잡성을 해결하지 못한다. 그것은 매우입니다 하지 예상에서 복잡 무대 뒤의 돌연변이 결과가 모든 경우에 복잡성을 상각 내게 분명. 마지막으로 생각했을 때 노력을 기울이면 반례를 만들 수 있다고 확신했습니다. 마지막 부분이 틀리더라도 적절한 분석이 부족하다는 것은 큰 차이입니다. UNION-FIND에 대한 Trajan의 고전적인 할부 상환 분석은 직접 이전되지 않습니다.


5
효율적인 버전 제어를위한 Confluently Persistent Tries 에는 완전히 영구적 인 (하지만 합류 적으로 영구적 인) 배열에 대한 후보가 제시되어 있습니다. 저자는 Dietz 등의 O (lg lg m) 속도를 늦추고 O (lg lg n) 속도 저하를 주장하며, 여기서 m은 어레이에서 수행 된 작업 수입니다.
jbapple

1
또한 오카 사키의 게으른 상각 구조는 대안보다 훨씬 간단하지만, 구현 할 수없는 방식으로 구현 할 수있는 데이터 구조는 알지 못합니다 (동일한 시간으로) 최악의 경우)는 순전히 기능적인 방식입니다.
jbapple

12

다른 순수한 기능적인 데이터 구조 문제는 무엇입니까?

여기 하나가 있습니다 :

약한 해시 테이블과 완전히 기능적으로 동등한 것은 무엇입니까?


15
음 .. OP가 답변되지 않은 질문을 요청 했으므로 OP의 질문에 대한 잠재적 인 답변이 될 수 있습니다.
Jason S

6
알았어. 약한 해시 테이블이란 무엇입니까?
Jeffε

4
해시 테이블이므로 요소 (및 다른 약한 맵)에만 참조가 포함 된 경우 요소를 가비지 수집 할 수 있습니다.
Havvy

3
@JonHarrop : 약한 참조는 언어의 의미론을 비결정적이고 순수하게 기능하는 언어가 결정적이기 때문에 약한 참조의 순수한 버전이 불가능하다는 것을 쉽게 입증 할 수 있습니다. 유형에 비결 정성을 추가로 표시하면 일반적인 구현이 작동합니다. 효과를 안전하게 숨기려면 종속 형식이 필요합니다 (구현물이 참조 내용에 관계없이 동일한 대답을 제공함을 증명하기 위해).
Neel Krishnaswami

5
@NeelKrishnaswami, 나는 그것이 사실이라고 생각하지 않습니다. 열거 (또는 계산)를 지원하지 않는 약한 테이블과 같이 비결 정성을 생성하지 않는 약한 데이터 구조를 만들 수 있습니다. 예제는 wiki.ecmascript.org/doku.php?id=harmony:weak_maps 를 참조하십시오 .
Sam Tobin-Hochstadt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.