데이터 구조 - 해시 테이블
organizes data using hash functions in order to support quick insertion and search
두 가지 유형이 다릅니다.
데이터 구조 설정 - 중복 값이 없습니다.
지도 데이터 구조 - 저장(키, 값) 쌍
해시 함수
maps a big number or string to a small integer that can be used as index in hash table.
콘셉트
개념here과 forjava specific info를 한층 더 읽다
부하 계수
number of of elements stored in table / number of buckets
average number of key-value pairs per bucket.
It offers tradeoff between time and space complexity
JavaHashmap
의 부하 계수는 0.75
이다.
용량/초기 용량
number of buckets
JavaHashMap
의 초기 용량16
문턱
Current Capacity * Load Factor
Capacity of Hashmap is doubled each time it reaches threshold
자바에서 Hashmap의 초기 용량은 16이고 부하 계수는 0.75이다.따라서 임계값은 16 * 0.75 = 12
입니다.
따라서 해시맵에 12번째 요소를 추가하면 해시맵의 용량은 16에서 32로 증가한다.
다시 카드를 씻는다
Hashing again. (eg. when capacity is increased)
새 용량의 새 HashMap 객체를 만들면 모든 이전 요소(키 값 쌍)가 해시 코드를 다시 계산한 후 새 객체에 배치됩니다.
초기 용량과 부하 계수의 선택은 재회화 작업의 횟수를 최소화해야 한다.
예.
부하 계수는 1.0f이다.(현재 용량의 100%를 채운 후 재회색)
maps a big number or string to a small integer that can be used as index in hash table.
개념here과 forjava specific info를 한층 더 읽다
부하 계수
number of of elements stored in table / number of buckets
average number of key-value pairs per bucket.
It offers tradeoff between time and space complexity
Java
Hashmap
의 부하 계수는 0.75
이다.용량/초기 용량
number of buckets
JavaHashMap
의 초기 용량16
문턱
Current Capacity * Load Factor
Capacity of Hashmap is doubled each time it reaches threshold
자바에서 Hashmap의 초기 용량은 16이고 부하 계수는 0.75이다.따라서 임계값은
16 * 0.75 = 12
입니다.따라서 해시맵에 12번째 요소를 추가하면 해시맵의 용량은 16에서 32로 증가한다.
다시 카드를 씻는다
Hashing again. (eg. when capacity is increased)
새 용량의 새 HashMap 객체를 만들면 모든 이전 요소(키 값 쌍)가 해시 코드를 다시 계산한 후 새 객체에 배치됩니다.
초기 용량과 부하 계수의 선택은 재회화 작업의 횟수를 최소화해야 한다.
예.
부하 계수는 1.0f이다.(현재 용량의 100%를 채운 후 재회색)
하중 계수는 0.5f이다.
해시표
use hash function to map keys to buckets
use hash function to map keys to buckets
예를 들어
y = x % 5
는 산열 함수이다1987년과 2년은 같은 통이었다.(통2)
해시 함수를 사용하여 버킷 2의 키를 검색합니다.
두 가지 기본 작업
디자인 해시표
1. 해싱 함수
assign key to bucket
as uniformly as possible
이상적인 상황에서 키와 버킷은 일대일로 비치는 것이다.그러나
amount of buckets
와 capacity of buckets
사이에는 항상 균형이 있다.좋은 해싱 함수는 다음과 같아야 합니다.
2. 충돌 감소
collision is when > 1 key is assigned to 1 bucket
이상적인 상황에서, 해시 함수는 키와 통의 일대일 반사이다.
고려 요소
N
array
스토리지 키O(N)
height balanced binary search tree
스토리지 키용O(log(n))
충돌 처리
situation where newly inserted key maps to an already occupied slot in hash table.
해시 함수는 큰 정수나 문자열의 키로 작은 숫자를 만들기 때문이다.두 키가 같은 값을 낼 수 있습니다.(예를 들어 생일 패러다임은 23명이 있어야 50%가 같은 생일을 공유할 수 있다)
1. 개별 링크
each cell of hash table point to a linked list of records that have same hash function value.
테이블 밖의 추가 메모리가 필요합니다.
개별 링크용 데이터 구조
situation where newly inserted key maps to an already occupied slot in hash table.
each cell of hash table point to a linked list of records that have same hash function value.
개별 링크 - 복잡성
복잡성은 독립 링크를 지원하는 하부 데이터 구조의 복잡성에 달려 있다
보통이었어
평균값은 균등한 산열로 가정한다
자세한 내용here
lf = load factor
n = number of elements
m = number of buckets
α = n / m
성공하지 못했어
O(α)
성공하지 못한 검색은 단독 링크의 체인 테이블을 철저히 검색해야 합니다.균등 산열 중 체인 테이블의 평균 길이는 부하 인자이다성공적
O(1+(α/2))
검색에 성공하면 체인 테이블에 목표 키가 포함되어 있을 것입니다.평균적으로 목표 키는 체인 테이블의 앞부분에서 찾을 수 있다.최악이었어
O(N)
최고이었어
O(1)
2. 공개 주소 찾기
all elements stored in the hash table itself.
모든 요소가 해시 테이블에 저장되어 있기 때문에, 테이블의 어떤 크기도 키의 총수보다 커야 한다.
각 테이블 항목에는 레코드 또는 NIL이 있습니다.요소를 검색하려면 테이블 슬롯을 하나씩 확인합니다.
삽입(k)
빈 슬롯을 찾고 키를 삽입할 때까지 계속 탐색하십시오
검색 (k)
플러그에 도달할 때까지 키 ==k 또는 빈 플러그를 계속 탐지합니다.
삭제(k)
키를 간단하게 삭제하면 검색에 실패할 수 있습니다.
삭제된 열쇠 슬롯은 특별히 '삭제됨' 으로 표시됩니다.항목은 삭제된 슬롯에 삽입할 수 있지만 삭제된 위치에서 검색을 중지할 수는 없습니다.
오픈 주소 지정 - 구현
1. 선형 탐지
probe for the next spot
If slot hash(x) % S is full, then we try (hash(x) + 1) % S
If (hash(x) + 1) % S is also full, then we try (hash(x) + 2) % S
If (hash(x) + 2) % S is also full, then we try (hash(x) + 3) % S
문제 - 주요 분류 문제
tendency for a collision resolution scheme to create long runs of filled slots near the hash position of keys.
점용된 세포 덩어리는 형성할 수 있다.집단이 더 커지고hashmap의 성능을 떨어뜨릴 수 있습니다.(전체 그룹을 옮겨다녀야 값을 찾을 수 있습니다)
2. 2차 탐지
Look for the next i2th slot in the ith iteration
If slot hash(x) % S is full, then we try (hash(x) + 1*1) % S
If (hash(x) + 1*1) % S is also full, then we try (hash(x) + 2*2) % S
If (hash(x) + 2*2) % S is also full, then we try (hash(x) + 3*3) % S
문제-이차 클러스터
tendency to create long runs of filled slots away from hash position of keys
여전히 메인 그룹보다 효율적이다.그것의 목적은 초급 세포단을 분열시켜 더욱 광범위하게 분리된 세포를 탐지하는 것이다.
주요와 부차적인 분류here를 더욱 상세하게 설명하였다.
3. 이중 산열
Use another hash function hash2(x) and look for i*hash2(x) slot in ith rotation.
If slot hash(x) % S is full, then we try (hash(x) + 1*hash2(x)) % S
If (hash(x) + 1*hash2(x)) % S is also full, then we try (hash(x) + 2*hash2(x)) % S
If (hash(x) + 2*hash2(x)) % S is also full, then we try (hash(x) + 3*hash2(x)) % S
요구 사항
오픈 주소 지정 - 복잡성
자세한 내용here
m = Number of slots in the hash table
n = Number of keys to be inserted in the hash table
Load factor α = n/m ( < 1 )
평균 - 실패
평균 분석 가설 균일 산열
검색 실패:
O(1/(1 - α))
삽입: O(1/(1-α))
파생probability of successful search = p
Probability 1st probe successful = (m-n)/m = 1-α
Probability 2nd probe successful = (m-n)/(m-1) > 1-α
따라서 모든 탐지기에서 확률은 적어도 1-α이다.따라서 최악의 경우 검색에 성공하지 못할 경우 최저 실행 수량1/p = 1/(1-α)
이 예상됩니다.평균 성공률
O((1/α) * log (1/(1-α))
모범 사례
O(1)
최악의 경우
O(N)
오픈 주소 지정 및 링크
오픈 주소 지정: 캐시 성능 향상
링크:함수에 민감하지 않음
해시집
Hashset은 set
데이터 구조의 실현이다.set
데이터 패브릭에 중복된 값이 저장되지 않음
no repeated values
백그라운드에서 Hashset은 자바 HashMap에서 지원하고 자바 HashMap은 모든 키를 single constant object 에 비추기
전형적인 용법
check if value has appeared or not.
Set<Type> hashset = new HashSet<>();
for (Type key: keys) {
if (hashset.contains(key)) {
// there is duplicate in set
return true;
}
// no duplicat add key
hashset.add(key);
}
해시표
hash functions are used to link key and values
map
저장 데이터의 (key,value)
데이터 구조에 대한 실현
build mapping relation between key & information
사용자가 키보다 더 많은 정보를 필요로 할 때 사용합니다.
엔진 덮개
내부에서, 그것은 하나의 저장통을 유지한다.
배치(키, 값)/가져오기(키)
키 대상의
no repeated values
check if value has appeared or not.
Set<Type> hashset = new HashSet<>();
for (Type key: keys) {
if (hashset.contains(key)) {
// there is duplicate in set
return true;
}
// no duplicat add key
hashset.add(key);
}
hash functions are used to link key and values
map
저장 데이터의 (key,value)
데이터 구조에 대한 실현build mapping relation between key & information
사용자가 키보다 더 많은 정보를 필요로 할 때 사용합니다.
엔진 덮개
내부에서, 그것은 하나의 저장통을 유지한다.
배치(키, 값)/가져오기(키)
키 대상의
index = hashCode(key) & (n-1).
을 사용하여 한 수로 변환합니다<=통 수비트별 AND 연산자를 사용하기 때문에 해시 코드의 낮은 비트만 고려합니다.
Java HashMap resolves collisions uses separate chaining (LinkedList)
키 대상의 해시 코드가 계산되면버킷의 체인 테이블을 옮겨다니며 값을 찾거나 체인 테이블의 끝에 놓으십시오.
더욱 상세한 읽기 자료는 GeeksforGeeks에서 찾을 수 있다(점차적인 과정/사례 연구 포함)보다 간략한 요약: DZone 및 javarevisited.
사용법
// 1. initialize a hash map
Map<Integer, Integer> hashmap = new HashMap<>();
// 2. insert a new (key, value) pair
hashmap.putIfAbsent(0, 0);
hashmap.putIfAbsent(2, 3);
// 3. insert a new (key, value) pair or update the value of existed key
hashmap.put(1, 1);
hashmap.put(1, 2);
// 4. get the value of specific key
System.out.println("The value of key 1 is: " + hashmap.get(1));
// 5. delete a key
hashmap.remove(2);
// 6. check if a key is in the hash map
if (!hashmap.containsKey(2)) {
System.out.println("Key 2 is not in the hash map.");
}
// 7. get the size of the hash map
System.out.println("The size of hash map is: " + hashmap.size());
// 8. iterate the hash map
for (Map.Entry<Integer, Integer> entry : hashmap.entrySet()) {
System.out.print("(" + entry.getKey() + "," + entry.getValue() + ") ");
}
System.out.println("are in the hash map.");
// 9. clear the hash map
hashmap.clear();
// 10. check if the hash map is empty
if (hashmap.isEmpty()) {
System.out.println("hash map is empty now!");
}
추가 정보 얻기 (키 제외)
From array of indices, return indices of two numbers such that they add up to specific target
이 경우 hashamp이 필요하고 저장값이 필요하며 hashmap에서 찾을 수 있는지 확인하십시오
target - current_value
.FAQ
키 모으기
aggregate all information by key
이러한 문제를 해결하는 관건은 기존 키를 만났을 때 정책을 정하는 것이다. (예를 들어hashmap 값을 1로 늘리고 원시 값을 새 값으로 바꾸는 것?)
FAQ
해싱 키 설계
산열 키의 디자인은 원시 정보와hashmap이 사용하는 키 사이에 있습니다.
building a mapping relationship
deciding what the hash key in hashmap should be
해시 키는 보증이 필요합니다
- All values belong to the same group will be mapped in the same group.
- Values which needed to be separated into different groups will not be mapped into the same group.
hash function fulfills criteria 1 but NOT 2
영사 함수는 이 두 조건을 동시에 만족시켜야 한다.예.
HashMap에서 그룹까지의 글자 수수께끼(예를 들어'먹기','먹기'같은 그룹,'하기'다른 그룹)
해시 키 맵은 정렬 문자열을 사용할 수 있습니다.eat와ate는 키 "aet"에 비칩니다.
자세히 보기
https://home.cse.ust.hk/~dekai/2012H/lectures/l32_hash.pdf
http://courses.csail.mit.edu/6.006/fall11/lectures/lecture10.pdf
http://www.cs.toronto.edu/~ylzhang/csc263w15/slides/lec05-hashing.pdf
Reference
이 문제에 관하여(데이터 구조 - 해시 테이블), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/jing/data-structure-hash-table-bbh
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(데이터 구조 - 해시 테이블), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jing/data-structure-hash-table-bbh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)