해시 테이블/해시 알고리즘 요약

  1. 키는 URL이고, hash(key)의 결과는 해시 배열에서 값의 저장 위치의 첨자이지만 충돌이 있을 수 있으므로 선형 프로브 또는 연결 목록 방법에 따라 다음으로 적합한 위치를 찾습니다. 해시(키)를 찾고 충돌을 해결한 후 이 위치에 값을 넣습니다.

  2. 우리 모두는 해시 테이블 충돌을 해결하는 두 가지 방법이 있다는 것을 알고 있습니다. 선형 탐색과 연결 목록 기반 체인입니다. 그렇다면 언제 선형 프로빙을 사용하는 것이 적합할까요? 개인적인 결론은 데이터 크기가 상대적으로 작거나 임베디드 시스템에서 사용하는 경우 선형 프로빙을 사용하고 다른 경우에는 체인이 적합하다는 것입니다. 연결된 목록의 요소에 prev/next와 같은 추가 정보를 추가해야 하므로 불필요한 메모리 오버헤드가 발생하므로 데이터 크기가 상대적으로 작습니다. 내장형 시스템은 연결 목록을 사용하면 malloc 및 메모리 할당이 포함되는 반면 내장형 시스템은 동적 메모리 할당에 적합하지 않기 때문에 선형 조사에 적합합니다. 물론 연결 리스트를 구현하기 위해 배열을 사용할 수도 있지만 위에서 언급한 추가 오버헤드의 문제도 있을 것입니다. 또한 데이터 자체가 연결 리스트라면 두 개의 연결 리스트가 체인으로 존재하게 되는데 하나는 데이터 자체의 연결 리스트이고 다른 하나는 충돌하는 각 요소의 지퍼 연결 리스트이며 많은 배열로 구현할 때 추가 오버헤드.

  3. 해시 테이블과 연결 목록이 자주 함께 사용되는 이유는 무엇입니까? //데이터 구조와 알고리즘의 아름다움에서/
    1) 해시 테이블의 장점: 효율적인 데이터 삽입, 삭제 및 검색 작업 지원

  1. 해시 테이블의 단점: 해시 테이블의 데이터가 해시 함수에 의해 스크램블된 후 불규칙적으로 저장되기 때문에 해시 테이블의 데이터에 대한 빠른 순차 순회를 지원하지 않습니다.
  2. 해시 테이블의 데이터를 순서대로 빠르게 탐색하는 방법은 무엇입니까? 데이터는 배열로만 전송된 다음 정렬되고 최종적으로 데이터를 트래버스할 수 있습니다.
  3. 우리는 해시 테이블이 데이터의 빈번한 삽입과 삭제를 필요로 하는 동적 데이터 구조라는 것을 알고 있습니다.
  4. 위의 문제를 해결하는 방법? 해시 테이블과 연결 목록(또는 점프 목록)의 조합입니다.
    해시 테이블과 연결 목록을 결합하는 방법은 무엇입니까?
    LRU(최소 최근 사용) 캐시 제거 알고리즘
    LRU 캐시 제거 알고리즘의 주요 작업은 무엇입니까? 주로 3가지 작업을 포함합니다:
    ①캐시에 데이터 추가,
    ②캐시에서 데이터 삭제,
    ③캐시에서 데이터 찾기,
    ④요약: 위의 3가지 모두 검색을 포함합니다.
    연결 목록으로 LRU 캐시 제거 알고리즘을 구현하는 방법은 무엇입니까?
    ① 접근 시간이 큰 것부터 작은 것 순으로 정렬된 연결 리스트 구조를 유지할 필요가 있다.
    ②버퍼 공간이 한정되어 있어 공간이 부족하여 일부 데이터를 제거해야 하는 경우 링크드 리스트의 선두에 있는 노드를 직접 삭제한다.
    ③ 특정 데이터를 캐싱하고 싶을 때 먼저 이 데이터를 연결 리스트에서 조회합니다. 찾을 수 없는 경우 데이터는 연결 목록의 끝에 직접 배치됩니다. 찾으면 연결된 목록의 끝으로 이동합니다.
    ④위에서 언급한 바와 같이 LRU 캐시의 3가지 주요 동작은 모두 검색을 수반하는데, 이를 단순히 연결 리스트로 구현한다면 검색의 시간복잡도는 O(n)으로 매우 높다. 연결 리스트와 해시 테이블을 함께 사용하면 조회 시간 복잡도가 O(1)로 줄어듭니다.
    해시 테이블과 연결 목록을 사용하여 LRU 캐시 제거 알고리즘을 구현하는 방법은 무엇입니까?
    ① 이중 연결 리스트를 사용하여 데이터를 저장하고, 연결 리스트의 각 노드는 데이터(data), 선행 포인터(prev), 후속 포인터(next) 및 hnext 포인터(해시 충돌을 해결하기 위한 연결 리스트 포인터)를 저장합니다.
    ②해시 테이블은 링크드 리스트 방식으로 해시 충돌을 해결하므로 각 노드는 두 개의 체인에 있게 됩니다. 한 체인은 이중 연결 목록이고 다른 체인은 해시 테이블의 지퍼입니다. 선행 및 후속 포인터는 이중 연결 목록의 노드를 문자열로 지정하는 데 사용되며 hnext 포인터는 해시 테이블의 지퍼에서 노드를 문자열로 지정하는 데 사용됩니다.
    ③ LRU 캐시 제거 알고리즘의 세 가지 주요 작업은 어떻게 O(1)의 시간 복잡도를 달성합니까?
    우선 연결 리스트 자체에 노드를 삽입하고 삭제하는 시간복잡도는 O(1)이다. 몇 개의 포인터만 변경하면 되기 때문이다. 다음으로 검색 작업의 시간 복잡도를 분석해 보겠습니다. 데이터 조각을 찾을 때 해시 테이블을 사용하여 O(1)의 시간 복잡도에서 데이터를 찾을 수 있으며 위에서 언급한 삽입 또는 삭제의 시간 복잡도는 O(1)이므로 전체 작업의 시간 복잡도는 정도는 O(1)입니다.

다음은 The Beauty of Data Structures and Algorithms/21 Hash Algorithms
Common applications of hash algorithms: Secure Encryption, Unique Identification, Data Verification, Hash Functions, Load Balancing, Data Fragmentation, and Distributed Storage에서 발췌한 것입니다.
1. 안전한 암호화
① 암호화에 일반적으로 사용되는 해시 알고리즘:
MD5: MD5 Message-Digest Algorithm, MD5 Message Digest Algorithm
SHA: Secure Hash Algorithm, Secure Hash Algorithm
DES: Data Encryption Standard, Data Encryption Standard
AES: Advanced Encryption Standard, Advanced Encryption 기준

② 암호화에 사용되는 해시 알고리즘에서 특히 중요한 두 가지 사항이 있는데 첫째는 해시값에서 원본 데이터를 역으로 추론하기 어렵다는 점이며 둘째는 해시 충돌 확률이 낮다는 점이다. .
③ 실제 개발에서는 어떤 암호화 알고리즘을 사용할 것인지를 결정하기 위해 크래킹의 난이도와 계산 시간을 따져볼 필요가 있다.
2. 고유 식별
데이터의 고유 식별은 효율적인 데이터 검색을 위해 사용되는 해시 알고리즘을 통해 계산됩니다.
3. 데이터 검증 해시
알고리즘은 입력 데이터에 민감한 특성을 이용하여 데이터에 대한 해시 값을 얻을 수 있어 데이터의 변조 여부를 효율적으로 검증할 수 있습니다.
4. 해쉬함수
해쉬함수에 사용되는 해쉬알고리즘은 해쉬된 값이 고르게 분포될 수 있는지 여부와 해쉬함수의 실행속도에 더 많은 주의를 기울인다.

Supongo que te gusta

Origin blog.csdn.net/roufoo/article/details/131280002
Recomendado
Clasificación