C 해시 찾기 실현
                                            
 33446 단어  알고리즘
                    
한 무더기 의 데이터 에서 특정한 데 이 터 를 포함 하고 있 는 지, 가장 많이 사용 되 는 선형 검색, 보초병 검색, 2 분 검색 (정렬 되 어 있 으 면) 을 찾 습 니 다. 그러나 이 검색 방법 들 은 적어도 O (logN) 의 복잡 도 입 니 다. 메모리 가 충분 하고 해시 함수 가 합 리 적 으로 구축 되 어 있다 면 하 쉬 를 사용 하여 다른 검색 알고리즘 을 순식간에 죽 일 수 있 습 니 다. 시간 복잡 도 는 O (1) 밖 에 없습니다.
요약 하면 일반적으로 우 리 는 한 무더기 의 데이터 (예 를 들 어 한 무더기 의 정수) 가 있 습 니 다. 우 리 는 보통 그들 중의 한 속성 (그 값 크기) 을 통 해 우리 가 찾 고 싶 은 (정수) 가 이 정수 에 존재 하 는 지 판단 합 니 다. 그러나 하나의 변 수 는 우리 가 주목 할 수 있 는 세 가지 속성 이 있어 야 합 니 다.
그러나 하 쉬 가 찾 는 것 은 이 데이터 의 저장 주소 에 착안 한 것 이다. 즉, 모든 데 이 터 를 어디 에 저장 해 야 하 는 지 이미 알 고 있다 는 것 이다. 당신 이 해 야 할 일 은 메모리 에 있 는 이 위치 에 물건 이 있 는 지 보 는 것 이다. 있 으 면 찾 았 다 는 것 을 설명 하고 없 으 면 이 데이터 에 우리 가 찾 고 싶 은 데이터 가 없다 는 것 을 설명 한다.
예 를 들 어 (메모리 위치 가 정확 하지 않 고 간결 함 을 설명 하기 위해 서): 저 에 게 데이터 가 한 무더기 있 습 니 다. 1, 2, 3, 34, 36, 23, 4, 12, 654, 8732 그러면 저 는 이렇게 저장 할 수 있 습 니 다.
1
2
3
34
36
0x00000010
0x00000014
0x0000001E
0x00000154
0x00000168
23
4
12
654
8732
0x000000E6
0x00000028
0x00000078
0x0000198C
0x00015518
모든 변수 가 저장 하 는 주 소 는 그 값 의 10 배 입 니 다. 우리 가 변 수 를 찾 으 려 고 할 때 그 값 을 10 으로 곱 하고 결 과 를 지침 에 부여 한 다음 에 이 지침 이 가리 키 는 값 이 우리 가 찾 고 싶 은 값 인지 아 닌 지 를 판단 합 니 다. 만약 에 이 데이터 에 저장 되 어 있다 는 것 을 설명 합 니 다. 그렇지 않 으 면 이 데이터 에 없 음 을 설명 합 니 다.
값 의 해시 값 을 어떻게 가 져 오 는 지 에 대해 서 는 더 이상 설명 하지 않 습 니 다. 다음은 하나의 예 입 니 다. 예 를 들 어 사용 하 는 배열 은 메모리 의 주 소 를 모 의 하고 해시 값 을 가 져 오 는 데 나머지 방법 을 사용 합 니 다.
C + + 의 컴 파 일 러 를 사용 하기 때문에 c + + 의 프로젝트 입 니 다. 그러나 핵심 문법 은 모두 C 로 작 성 된 것 입 니 다. C + + 의 부분 은 많이 언급 되 지 않 았 습 니 다. 본 예 에서 사용 하 는 것 은 하나의 링크 구조 입 니 다. 각 노드 에는 다음 노드 를 가리 키 는 지침 과 유일한 정수 가 포함 되 어 있 습 니 다.
#include "pch.h"
#include 
");
  while (head != nullptr) {
    printf("%d\t", head->value);
    head = head->next;
  }//print the link list before we remove anyone
  j = 0;
  while (j < Length) {
    if (hashmap.link_list[j] != nullptr) {
      head = hashmap.link_list[j];
      break;
    }
    j++;
  }//ensure the head is the first one of the link list
  removeNode(&hashmap, find(&hashmap, 423));
  removeNode(&hashmap, find(&hashmap, 1));
  printf("
 After remove a node:
");
  while (head != nullptr) {
    if(head->value!=NULL)
      printf("%d\t", head->value);
    head = head->next;
  }//print the result of the link list after we remove 423 and 1
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.