해시 테이블 VS 관련 어레이
최근 나는 매우 유명한 책 "알고리즘 입문"에서 해시 테이블에 대해 읽은 적이 있다.아직 실제 어플리케이션에서 사용한 적은 없지만 사용하고 싶습니다.하지만 어떻게 시작해야 할지 모르겠어요.
예를 들어 사전 어플리케이션(ABB 등)을 실현하는 방법 등, 사용 예에 대해 가르쳐 주실 수 있는 분?YY Lingvo)는 해시 테이블을 사용하고 있습니까?
마지막으로 해시 테이블과 PHP의 관련 어레이의 차이점을 알고 싶습니다.즉, 어떤 기술을 사용해야 하는지, 어떤 상황에서 사용해야 하는지 알고 싶습니다.
제가 틀렸다면 (죄송합니다) 정정해 주세요.실제로 해시 테이블에서 시작해서 해시 테이블에 대한 기본적인 (이론적인) 지식만 가지고 있기 때문입니다.
고마워요.
PHP에서는 연관 배열이 해시 테이블로 구현되며 약간의 추가 기능이 있습니다.
단, 엄밀히 말하면 어소시에이트 어레이는 해시 테이블과 동일하지 않습니다.단, 부분적으로는 해시 테이블을 백그라운드에서 실장할 뿐입니다.구현의 대부분이 해시 테이블이기 때문에 해시 테이블이 할 수 있는 모든 것을 할 수 있지만 더 많은 것을 할 수도 있습니다.
예를 들어 for 루프를 사용하여 관련 어레이를 루프할 수 있지만 해시 테이블에서는 루프할 수 없습니다.
따라서 두 어레이는 비슷하지만 실제로 해시 테이블이 수행할 수 있는 기능의 슈퍼셋을 수행할 수 있습니다.따라서 두 어레이는 완전히 동일하지는 않습니다.해시테이블에 추가 기능을 더한 것으로 생각해 주세요.
코드 예:
연관 배열을 해시 테이블로 사용:
$favoriteColor = array();
$favoriteColor['bob']='blue';
$favoriteColor['Peter']='red';
$favoriteColor['Sally']='pink';
echo 'bob likes: '.$favoriteColor['bob']."\n";
echo 'Sally likes: '.$favoriteColor['Sally']."\n";
//output: bob likes blue
// Sally likes pink
연관된 어레이를 통한 루프:
$idTable=array();
$idTable['Tyler']=1;
$idTable['Bill']=20;
$idTable['Marc']=4;
//up until here, we're using the array as a hashtable.
//now we loop through the array - you can't do this with a hashtable:
foreach($idTable as $person=>$id)
echo 'id: '.$id.' | person: '.$person."\n";
//output: id: 1 | person: Tyler
// id: 20 | person: Bill
// id: 4 | person: Marc
특히 두 번째 예에서는 배열에 입력된 순서에 따라 각 요소의 순서(타일러, 빌 마크)가 유지되는 방법에 유의하십시오.이것이 연관 배열과 해시 테이블의 큰 차이입니다.해시 테이블은 유지되는 항목 간의 연결을 유지하지 않지만 PHP 연관 배열은 유지된다(PHP 연관 배열 정렬도 가능).
php 배열은 기본적으로 해시 테이블입니다.
연관 배열과 해시 테이블의 차이점은 연관 배열이 데이터 유형인 반면 해시 테이블은 데이터 구현이라는 것입니다.현재 많은 프로그래밍 언어에서 연관 배열 유형은 매우 중요합니다.Perl, Python, PHP 등해시 테이블이 연관 배열을 구현하는 주요 방법이지만 유일한 방법은 아닙니다.연관 배열이 해시 테이블의 주요 용도이지만, 유일한 용도는 아닙니다.즉, 동일한 어레이가 아니라 이미 관련지어져 있는 어레이라면 그 차이를 걱정할 필요가 없습니다.
퍼포먼스상의 이유로, 마음에 드는 언어의 어소시에이션 어레이는 해시로 실장되어 있는 것이 중요합니다.또한 구현에 드는 오버헤드 비용을 파악하는 것이 중요합니다.해시 테이블은 C에서 볼 수 있듯이 선형 어레이보다 더 느리고 더 많은 메모리를 사용합니다.
Perl은 관련 어레이를 "해시"라고 부르면서 두 개념을 하나로 묶습니다.Perl의 많은 기능과 마찬가지로, 그다지 틀린 것은 아니지만, 엉성합니다.
PHP의 배열은 실제로는 해시 테이블이 아닌 순서가 지정된 맵입니다.맵과 해시테이블의 주요 차이점은 추가된 요소의 순서를 기억할 수 없다는 것입니다.반면 해시테이블은 지도보다 훨씬 빠르다.맵에서 요소를 가져오는 복잡도는 O(nlogn), 해시 테이블에서 O(1)이다.
연관 배열은 인덱스가 아닌 키로 요소에 액세스하는 배열입니다.이것이 내부에서 어떻게 동작하는지는 실장에 따라 다릅니다(실장 방법에 대한 규칙은 없습니다).연관 배열은 해시 테이블에 의해 구현될 수 있지만(대부분의 구현은 그렇게 할 수 있습니다), 어떤 종류의 트리 구조나 건너뛰기 목록에 의해 구현될 수도 있습니다.또한 알고리즘이 어레이 내의 모든 요소에 대해 반복하여 일치하는 키를 찾을 수도 있습니다(이것은 매우 느리지만 동작합니다.
해시 테이블은 값이 키에 관련지어져 있고 (보통 거의) 일정한 시간 내에 키의 값을 찾는 데이터를 저장하는 방법입니다.이는 연관지을 수 있는 어레이에 대한 기대와 정확히 일치하기 때문에 대부분의 경우 이러한 어레이를 구현하기 위해 해시 테이블이 사용되지만 필수는 아닙니다.
언급URL : https://stackoverflow.com/questions/3134296/hash-tables-vs-associative-arrays
'programing' 카테고리의 다른 글
1개의 테이블에서 생성된 키를 1개의 요청으로 일괄 처리하여 2번째 테이블에 삽입합니다. (0) | 2022.09.30 |
---|---|
드라이버 클래스 com.mysql.jdbc를 로드할 수 없습니다.드라이버 스프링 (0) | 2022.09.28 |
포커스가 있는 DOM 요소를 확인하려면 어떻게 해야 하나요? (0) | 2022.09.28 |
오브젝트가 있으면 어떻게 가져오고, 없으면 없음으로 가져오나요? (0) | 2022.09.28 |
Javascript에서 현재 포맷된 날짜 dd/mm/yyy를 가져와 입력에 추가하는 방법 (0) | 2022.09.28 |