python에는 hash 함수가 있습니다. 무엇을 하는 함수일까요? 간단하게 hash(1)과 hash('str')을 입력해 보겠습니다. 그랬더니 1과 -34797.. 이 나옵니다. 객체의 hash값을 돌려주기 위해서 쓴다. 정도로 추정할 수 있습니다. 이제, Obj 하나를 정의해 보겠습니다. 생성자에 인자 x를 받습니다. 그러면 Obj의 필드 x에 x의 값을 넣습니다. 이제 Obj(1)의 해시값과, 다른 객체인 Obj(1)의 해시값을 비교해 보겠습니다. 다릅니다. 왜? __hash__가 재정의 되어 있지 않기 때문입니다. 파이썬에서는 dict, counter 등이 hash를 기반으로 동작하는데요. 키 값으로 custom한 객체를 넘겨줄 때 __hash__를 재정의 해야 할 겁니다. 이 __hash__ 안..
hash 검색 결과
BinarySearch에 대해서 잘못된 부분을 수정하기 위해서, 프로그램을 작성하게 되었습니다. 코드 제너레이터를 이용해서, 게터, 세터, equals, hashCode 등을 자동으로 생성하게 되었습니다. 중요한 부분만 코드로 보도록 하겠습니다. Obj 클래스입니다. binarySearch를 할 때, key가 여러개 나올 때 lower_bound나 upper_bound를 이용할 수 없다고 없다고 하였습니다. 그것이 가능하게 하려면, unique 한 속성으로 떨어트려야 하는데요. 키가 등장한 위치 lo는 unique 합니다. 따라서, (x, lo) 쌍도 unique 할 겁니다. hashCode를 재정의 한 것을 보니까 Objects.hash(x, lo); 가 보이는데요. 이것이 무엇을 하는지는 모르겠지만,..
나중에 설명할 인덱스를 소개하기 전에, Hash와 균형 트리의 차이점을 짚고 넘어가는 게 나을 듯 싶습니다. 사실, 나중에 인덱스에 대해서 할 때, 이런 이야기는 상당히 많이 나오기 때문입니다. 범위 검색과 동등 검색. 맞나 잘 모르겠어요. 일치 검색인지. 하여튼, Tree 기반 인덱스와 Hash 기반 인덱스가 나오는데요. 이에 대해서 지금은 잘 모르셔도 괜찮습니다. 대신에, 균형 Tree 기반으로 찾는 것과, Hash 기반으로 찾는 것에 대해서 다루고 넘어가도록 하겠습니다. 자료구조에 대해서 복습도 할 겸. 사실 왜 그렇게 하는지 디스크와 메모리에 대한 차이도 이해해야 겠지만, 여기서 길게 언급하면 글이 매우 길어질 듯 싶으니 언급하진 않겠습니다. 먼저, Hash 기반 자료구조는 = 검색에 특화된 구조..
최근댓글