Programing

지도와 사전의 차이점은 무엇입니까?

lottogame 2020. 6. 3. 07:59
반응형

지도와 사전의 차이점은 무엇입니까?


지도가 키를 값에 매핑하는 데이터 구조라는 것을 알고 있습니다. 사전이 같지 않습니까? 지도와 사전 1 의 차이점은 무엇입니까 ?


1. 나는 언어 X 또는 Y로 정의되는 방법을 묻지 않고 (일반적으로 사람들이 일반적으로 여기에서 묻는 것 같습니다) 이론에서 그들의 차이점이 무엇인지 알고 싶습니다.


같은 것을위한 두 가지 용어 :

  • "Map" 은 Java, C ++에서 사용됩니다.
  • "사전" 은 .Net, Python에서 사용됩니다.
  • "연관 배열" 은 PHP에서 사용됩니다

"Map" 은 올바른 수학적 용어이지만 기능 프로그래밍 에서 별도의 의미를 갖기 때문에 피 합니다 .

일부 언어는 여전히 다른 용어 (Javascript의 "Object", Ruby의 "Hash", Lua의 "Table") 를 사용하지만, 프로그래밍에서도 별도의 의미를 가지므로 피해야합니다.

자세한 내용은 여기참조 하십시오 .


하나는 다른 하나의 오래된 용어입니다. 일반적으로 "사전"이라는 용어는 수학 용어 "지도"가 사용되기 전에 사용되었습니다. 또한 사전에는 키 유형의 문자열이있는 경향이 있지만 모든 곳에서 100 % 사실은 아닙니다.


내 2 센트

Dictionary는 Java의 추상 클래스 인 반면 Map은 인터페이스입니다. Java는 다중 상속을 지원하지 않으므로 클래스가 Dictionary를 확장하면 다른 클래스를 확장 할 수 없습니다.

따라서 맵 인터페이스가 도입되었습니다.

사전 클래스는 더 이상 사용되지 않으며 맵을 사용하는 것이 좋습니다.


일반적으로 맵은 해시 테이블에 의해 지원된다고 가정합니다. 순서가없는 상점을 의미합니다. 사전은 주문 된 상점을 의미합니다.

Trie 라는 트리 기반 사전이 있습니다.

Lisp에서 다음과 같이 보일 수 있습니다.

(a (n (d t)) n d )

다음 단어를 캡슐화합니다.

  • 개미
  • 기원 후

상단에서 잎까지 순회하면 단어가 나타납니다.


실제로 같은 것은 아닙니다. 지도는 사전의 하위 집합입니다. 여기서 사전은 삽입, 삭제 및 찾기 기능을 갖는 것으로 정의 됩니다 . Java에 의해 사용되는 맵 ( this 에 따르면 )은 값에 대한 키 맵핑이 일대일 함수로 엄격하게 맵핑되어야하는 사전입니다. 사전은 트위터 해시 태그 검색과 같이 하나 이상의 키맵을 하나 이상의 값으로, 또는 하나의 키맵을 여러 값으로 묶을 수 있습니다 (서열 테이블의 연쇄 등).

좀 더 "실제"예를 들어, 사전에서 단어를 검색하면 동일한 단어에 대한 여러 가지 정의를 얻을 수 있으며, 다른 항목 (다른 단어 참조)을 가리키는 항목을 찾을 때 여러 단어 동일한 정의 목록에 대해 실제로는지도가 훨씬 더 넓어 좌표의 이름이나 이름의 위치를 ​​지정할 수 있지만 가장 가까운 이웃이나 다른 속성 (인구 등)을 찾을 수 있으므로 IMHO의 확장에 대한 논거가있을 수 있습니다 지도 유형은 그래프 기반 구현을 가질 수 있지만 항상 키-값 쌍만 가정하는 것이 가장 좋습니다. 특히 가장 가까운 이웃 및 값에 대한 다른 속성은 모두 값의 데이터 멤버 일 수 있기 때문입니다.

Java 맵은 일대일 요구 사항에도 불구하고 값이 컬렉션 자체로 일반화되거나 값이 다른 곳에 저장된 컬렉션에 대한 참조 인 경우 일반 사전과 같은 것을 구현할 수 있습니다.

Java 관리자는 ADT 정의의 관리자가 아니며 Java 결정은 특히 Java를위한 것임을 기억하십시오.


이 개념에 대한 다른 용어는 일반적으로 연관 배열 및 해시입니다.


예, 동일합니다. "Associative Array"를 믹스에 추가 할 수 있습니다.

사용 Hashtable또는 Hashofter는 구현을 나타냅니다.


순전히 이론적 인 수준에서.

사전은 연결된 값을 찾는 데 사용할 수있는 값입니다. 맵은 다른 값을 찾는 방법에 대한 지침을 제공하는 값입니다

단순한 배열조차도 올바른 값으로 매핑되는 인덱스가 있기 때문에 비선형 액세스를 허용하는 모든 컬렉션 (즉, 첫 번째 만 가져 오기 또는 마지막으로 가져 오기)은 맵입니다. 따라서 사전은지도 유형이지만,지도는 훨씬 광범위한 기능을 수행 할 수 있습니다.

실제로는 일반적으로 이름을 정의하는 매핑 함수이므로 HashMap은 해싱 알고리즘을 사용하여 키를 값에 연결하는 매핑 된 데이터 구조입니다. 여기서 사전은 키가 값에 연결되는 방법을 지정하지 않습니다. 연결된 목록, 트리 또는 다른 알고리즘을 통해 저장할 수 있습니다. 사용법 끝에서 일반적으로 알고리즘이 작동하는 것만 신경 쓰지 않으므로 일반 사전을 사용하고 알고리즘 유형을 enfore해야 할 때만 다른 구조 중 하나로 만 전환하십시오.


프로그래머가 복잡하다이 질문에 대답하는 것은 그들이 사용했던 특정 언어 나 시스템의보다 구체적인 의미를 주어진 조건을 볼 수 있지만, 문제는 내 말을 데려 갈거야 "이론"언어 무신론자 비교를 요구 한 컴퓨팅 과학의 관점에서 .

용어 설명

컴퓨터 과학 의 옥스포드 대학 사전 목록 :

요소의 삽입 및 삭제를 지원하고 멤버쉽을 테스트 할 수있는 요소 세트를 나타내는 모든 데이터 구조 사전

  • 예를 들어 삽입 할 수 있고 삭제를 시작할 수있는 {A, B, C, D ...} 요소 세트가 있으며 "C가 있습니까?" 를 쿼리 할 수 ​​있습니다. .

The Computing Science notion of map though is based on the mathematical linguistic term mapping, which the Oxford Dictionary defines as:

mapping An operation that associates each element of a given set (the domain) with one or more elements of a second set (the range).

  • As such, a map data structure provides a way to go from elements of a given set - known are "keys" in the map, to one or more elements in the second set - known as the associated "value(s)".
  • The "...or more elements in the second set" aspect can be supported by an implementation is two distinct way:
    • Many map implementations enforce uniqueness of the keys and only allow each key to be associated with one value, but that value might be able to be a data structure itself containing many values of a simpler data type, e.g. { {1,{"one", "ichi"}, {2, {"two", "ni"}} } illustrates values consisting of pairs of strings.
    • Other map implementations allow duplicate keys each mapping to the same or different values - which functionally satisfies the "associates...each [key] element...with...more [than one] [value] elements" case. For example, { {1, "one"}, {1, "ichi"}, {2, "two"}, {2, "ni"} }.

Dictionary and map contrasted

So, using the strict Comp Sci terminology above, a dictionary is only a map if the interface happens to support additional operations not required of every dictionary:

  • the ability to store elements with distinct key and value components

  • the ability to retrieve the value(s) given only the key

A trivial twist:

  • a map interface might not directly support a test of whether a {key,value} pair is in the container, which is pedantically a requirement of a dictionary where the elements happen to be {key,value} pairs; a map might not even have a function to test for a key, but at worst you can see if an attempted value-retrieval-by-key succeeds or fails, then if you care you can check if the key retrieved an expected value.

Communicate unambiguously to your audience

⚠ Despite all the above, if you use dictionary in the strict Computing Science meaning explained above, don't expect your audience to follow you initially, or be impressed when you share and defend the terminology. The other answers to this question (and their upvotes) show how likely it is that "dictionary" will be synonymous with "map" in the experience of most programmers. Try to pick terminology that will be more widely and unambiguously understood: e.g.

  • associative container: any container storing key/value pairs with value-retrieval and erasure by key
  • hash map: a hash table implementation of an associate container
  • hash set enforcing unique keys: a hash table implementation of a dictionary storing element/values without treating them as containing distinct key/value components, wherein duplicates of the elements can not be inserted
  • balance binary tree map supporting duplicate key: ...

Crossreferencing Comp Sci terminology with specific implementations

C++ Standard Library

  • maps: map, multimap, unordered_map, unordered_multimap
  • other dictionaries: set, multiset, unordered_set, unordered_multiset
  • note: with iterators or std::find you can erase an element and test for membership in array, vector, list, deque etc, but the container interfaces don't directly support that because finding an element is spectacularly inefficient at O(N), in some cases insert/erase is inefficient, and supporting those operations undermines the deliberately limited API the container implies - e.g. deques should only support erase/pop at the front and back and not in terms of some key. Having to do more work in code to orchestrate the search gently encourages the programmer to switch to a container data structure with more efficient searching.

...may add other languages later / feel free to edit in...


The main difference is that a Map, requires that all entries(value & key pair) have a unique key. If collisions occur, i.e. when a new entry has the same key as an entry already in the collection, then collision handling is required.

Usually, we handle collisions using either Separate Chaining. Or Linear Probing.

A Dictionary allows for multiple entries to be linked to the same key.

When a Map has implemented Separate Chaining, then it tends to resemble a Dictionary.


These are two different terms for the same concept.
Hashtable and HashMap also refer to the same concept.

참고URL : https://stackoverflow.com/questions/2884068/what-is-the-difference-between-a-map-and-a-dictionary

반응형