블로그 이미지
자신의 단점을 메꾸는 것을 단(鍛)이라 하고 자신의 강점을 갈고 닦는 것을 련(鍊)이라 하여, 두가지를 합친 것을 단련이라고 부른다. 붕대마음

카테고리

전체목록 (666)
참고사이트 (8)
Goal (4)
Travel (10)
My Life (105)
Game (35)
Game Review (7)
Game Plan (0)
Books (5)
English (1)
Optimizing (12)
Study (217)
유용한 것들_etc (44)
유용한 것들_func (20)
Unity (48)
Unreal (87)
작업장 (54)
RenderMonkey (6)
정리요망 (1)
따라잡기 시리즈 (0)
링크용 (0)
Total343,844
Today11
Yesterday82

'ELFHash'에 해당되는 글 1건

  1. 2011.04.22 Hash 함수 모음

Hash 함수 모음

Study/C++ / 2011.04.22 11:08
<출처 : http://blog.daum.net/aswip/4538253>



// RS Hash Function
unsigned int RSHash(const std::string& str) { unsigned int b = 378551; unsigned int a = 63689; unsigned int hash = 0; for(std::size_t i = 0; i < str.length(); i++) { hash = hash * a + str[i]; a = a * b; } return (hash & 0x7FFFFFFF); } // JS Hash Function unsigned int JSHash(const std::string& str) { unsigned int hash = 1315423911; for(std::size_t i = 0; i < str.length(); i++) { hash ^= ((hash << 5) + str[i] + (hash >> 2)); } return (hash & 0x7FFFFFFF); } // P. J. Weinberger Hash Function unsigned int PJWHash(const std::string& str) { unsigned int BitsInUnsignedInt = (unsigned int)(sizeof(unsigned int) * 8); unsigned int ThreeQuarters = (unsigned int)((BitsInUnsignedInt * 3) / 4); unsigned int OneEighth = (unsigned int)(BitsInUnsignedInt / 8); unsigned int HighBits = (unsigned int)(0xFFFFFFFF) << (BitsInUnsignedInt - OneEighth); unsigned int hash = 0; unsigned int test = 0; for(std::size_t i = 0; i < str.length(); i++) { hash = (hash << OneEighth) + str[i]; if((test = hash & HighBits) != 0) { hash = (( hash ^ (test >> ThreeQuarters)) & (~HighBits)); } } return (hash & 0x7FFFFFFF); } // ELF Hash Function unsigned int ELFHash(const std::string& str) { unsigned int hash = 0; unsigned int x = 0; for(std::size_t i = 0; i < str.length(); i++) { hash = (hash << 4) + str[i]; if((x = hash & 0xF0000000L) != 0) { hash ^= (x >> 24); hash &= ~x; } } return (hash & 0x7FFFFFFF); } // BKDR Hash Function unsigned int BKDRHash(const std::string& str) { unsigned int seed = 131; // 31 131 1313 13131 131313 etc.. unsigned int hash = 0; for(std::size_t i = 0; i < str.length(); i++) { hash = (hash * seed) + str[i]; } return (hash & 0x7FFFFFFF); } // SDBM Hash Function unsigned int SDBMHash(const std::string& str) { unsigned int hash = 0; for(std::size_t i = 0; i < str.length(); i++) { hash = str[i] + (hash << 6) + (hash << 16) - hash; } return (hash & 0x7FFFFFFF); } // DJB Hash Function unsigned int DJBHash(const std::string& str) { unsigned int hash = 5381; for(std::size_t i = 0; i < str.length(); i++) { hash = ((hash << 5) + hash) + str[i]; } return (hash & 0x7FFFFFFF); } // DEK Hash Function unsigned int DEKHash(const std::string& str) { unsigned int hash = static_cast<unsigned int>(str.length()); for(std::size_t i = 0; i < str.length(); i++) { hash = ((hash << 5) ^ (hash >> 27)) ^ str[i]; } return (hash & 0x7FFFFFFF); } // AP Hash Function unsigned int APHash(const std::string& str) { unsigned int hash = 0; for(std::size_t i = 0; i < str.length(); i++) { hash ^= ((i & 1) == 0) ? ( (hash << 7) ^ str[i] ^ (hash >> 3)) : (~((hash << 11) ^ str[i] ^ (hash >> 5))); } return (hash & 0x7FFFFFFF); }


'Study > C++' 카테고리의 다른 글

random  (0) 2014.11.29
factory function (팩토리 함수)  (0) 2012.05.12
Hash 함수 모음  (0) 2011.04.22
boost::has_trivial_assign  (0) 2011.04.10
메모리맵 파일  (0) 2011.04.09
LIB / DLL 차이점  (0) 2011.03.17
Posted by 붕대마음

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함