Hash Function
hashcode("abcd") = (ascii(a) * 333 + ascii(b) * 332 + ascii(c) *33 + ascii(d)) % HASH_SIZE
= (97* 333 + 98 * 332 + 99 * 33 +100) % HASH_SIZE
= 3595978 % HASH_SIZE
here HASH_SIZE is the capacity of the hash table (you can assume a hash table is like an array with index 0 ~ HASH_SIZE-1).
Given a string as a key and the size of hash table, return the hash value of this key.f
Lintcode의 한 문제는 기술적 함량이 없고 공식에 따라hash값을 구하는 것이다.그러나 이런straight forward의 방법은 마지막에 시간을 초과했기 때문에 사실 잉여 연산은 최적화를 할 수 있다. 즉, 마지막에 잉여 연산을 하지 않고 매 단계의 연산에서 잉여를 취할 수 있다.코드는 다음과 같습니다.
class Solution:
"""
@param key: A String you should hash
@param HASH_SIZE: An integer
@return an integer
"""
def hashCode(self, key, HASH_SIZE):
if not key:
return 0
hashcode = 0
for s in key:
hashcode = (hashcode*33 + ord(s))%HASH_SIZE
return hashcode
이런 조작의 정확성은 증명할 수 있다. 즉, (a+b)%c=(a%c+b)%c는 성질(1)에서 내놓을 수 있다.
(a + b) % p = (a % p + b % p) % p (1)
(a - b) % p = (a % p - b % p) % p (2)
(a * b) % p = (a % p * b % p) % p (3)
(a^b) % p = ((a % p)^b) % p (4)
추론:
만약에 a≡b(%p)라면 임의의 c에 대해 (a+c)≡(b+c)(%p)가 있다.(10)
만약에 a≡b(%p)라면 임의의 c에 대해 (a*c)≡(b*c)(%p)가 있다.(11)
만약 a≡b(%p), c≡d(%p), (a+c)≡(b+d)(%p), (a-c)≡(b-d)(%p),
(a * c) ≡ (b * d) (%p),(a/c) ≡ (b/d) (%p); (12)
페마의 정리: 만약에 p가 소수이고 a가 정수이며 p에 의해 제거될 수 없다면: a^(p-1)modp = 1modp
추론: 만약에 p가 소수이고 a가 정수이며 p에 의해 제거될 수 없다면: a^pmodp=amodp
다음으로 전송:https://www.cnblogs.com/sherylwang/p/5589223.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.