조회 및 정보 검색에 대한 해싱 기술을 배우고 있습니다. 하지만 깊이 파헤 치기 전에 일반적으로 해시 함수에 대한 특정 개념과 혼동합니다.벡터 해시의 기본 개념
말은 부동 소수점 값의 벡터 인 x
입니다. xi = [x_1,x_2,...,x_L]
입니다. 벡터의 크기는 L
입니다. 예를 들어 X = [x1,x2,..,x_N]
이라고도하는 이러한 벡터가 N
입니다. 쿼리 벡터 p
이 주어지면 쿼리와 일치하는 가장 가까운/가장 가까운 예제를 찾아야합니다. 여러 가지 읽기 자료를 살펴보면 테이블 크기가 M=10
(말) 일 때 가장 간단한 (그러나 비효율적 인) 해싱 함수는 h(x) = x mod M
입니다.
x mod M
가 M
으로 나누었을 때, 다음 x mod M
항상 0
및 M -1
사이에있을 것입니다 x
의 나머지, 우리는 항상 M
슬롯 중 하나에 정수를 매핑 할 수 있습니다. 내 질문 :
질문 1 : 계수는 테이블 크기에 대해 수행됩니다. 그러나 각 샘플 길이가 L
이고 해당 샘플이 N
인 경우 모듈 숫자가 무엇입니까? 하겠습니까 h(x) = x mod vector length
또는 h(x) = x
mod number of examples
?
일반적으로 암호화 응용 프로그램에서는 각 블록의 크기가 8 비트이므로 mod 256이 사용됩니다. 이것은 계수가 벡터의 길이에 걸쳐 취해진다는 것을 의미합니까? 잘못하면 나를 바로 잡으십시오.
질문 2 : 많은 예제에서 입력 값이 ASCII 값 또는 정수로 표시되므로 부동 소수점 숫자를 정수로 변환해야합니까?
질문 3 : 해쉬 함수가 h(x) = 2*x mod 1
인 경우, [0,1]
범위의 부동 소수점 숫자가 생성됩니다. H(x) = round(h(x))
을 사용하여 정수로 변환 할 수 있습니다. 메시지 예제가 x
인 경우 길이가 각각 L
인 k
블록으로 분할 된 경우 k
해시 함수가 필요합니까? 이 예제의 해쉬 함수에 대한 제안. 고맙습니다.
답장을 보내 주셔서 감사합니다. 그러나 모듈러스 연산과 테이블 크기는 아직 명확하지 않습니다. 나는 Matlab을 사용하고 있으며 객체의 데이터베이스를 가지고있다. 각 객체는 길이 L의 배열 인 특징 벡터입니다. 제 질문에서, 각 벡터의 길이는 L입니다. 그래서 행 N은 데이터 객체 (데이터 포인트)이고 ach 열은 피쳐입니다 . 이러한 열은 L이므로 객체의 배열 길이는 L입니다. 따라서 테이블 크기가 N 또는 L이됩니까? –
그것은 둘 다 없을 것입니다! 내 팔을 비틀면서 각 데이터 객체에 대해 N의 크기를 말할 것입니다. 그러나 다른 객체와의 충돌을 피하기 위해 테이블을 길게하려는 이유가 있습니다. 테이블에 빈 공간이 생기고 괜찮습니다. 그것이 작동하는 방법입니다! 그러나 아이디어는 데이터 객체를 해싱 할 때 숫자를 얻는 것입니다. 가능한 한 무작위로, 테이블의 크기 (N * 2와 같은)와 함께 모듈러스 연산자를 사용할 수 있으므로 번호가 얼마나 미친 지 상관없이 테이블의 범위에서 인덱스를 얻을 수 있습니다. . –
modulo 연산자 자체에 대해 궁금한 점이 있다면, '500 % 11'은 기본적으로 "가능한 한 많은 500을 11로 나누고이 경우 나눌 수없는 나머지는 무엇이든지 대답합니다"라고 말합니다. 왜냐하면'495/11 = 0'이고 나머지 5 개가 남아 있습니다! 따라서 테이블 길이가 11 인 경우이 값을 볼 수 있습니다. 항상 0에서 10 사이의 숫자를 제공하기 때문입니다. –