만들어야하는게 문자열을 많이 받아야해서요.^^; 저 정도면 안될것같습니다. 답변 달아주셔서 감사합니다
2011.07.01 03:14:38 (*.143.139.201)
뻐그
C/C++에서는 switch에서 문자열을 받을 수가 없습니다. 차라리 hash table을 이용하시는 게 어떨까 싶네요.
2011.07.01 07:35:56 (*.42.157.30)
Ax
C/C++ 에선 문자열을 받을 수가 없습니다. 간단하게 enum 을 사용해보세요.
2011.07.01 16:37:23 (*.165.22.34)
kimo
아 감사합니다 ^^/
2011.07.01 19:35:39 (*.128.110.82)
안승례
뻐그//이건 그냥 궁금해서 물어보는건데.. 제가 알기로 해쉬값은 겹칠 위험이 있다고 들었는데요. 겹치지 않게 하는 방법이 있나요?
2011.07.02 12:38:00 (*.86.27.242)
령의아이
근데 그냥 if else 쓰면 안되요??? ㅇㅇ???? 왜 굳이 switch 를 고집하는 이유가????
2011.07.02 16:41:27 (*.48.39.164)
꼬마네꼬
안승례님// 겹칠 위험 없습니다. 다른 원문에 대해 동일한 Hash 값이 나온다면 그 해쉬 알고리즘은 더 이상 의미가 없는 알고리즘입니다.
실제로 시간이 지나면서 우연히 같은 결과가 나오는 원문이 발견 되긴 하죠. 하지만 그렇게 되면 다른 해쉬 알고리즘을 쓰는 겁니다.
(실제로는 같은 값이 나오는 경우가 유니크하거나 의미 없을 정도의 경우라고 보고 계속 쓰는 경우도 있긴 합니다.)
2011.07.04 14:55:37 (*.180.116.178)
Cloudkiss
꼬마네꼬//모든 입력값에 대해 완벽히 다른 값이 나오는 해싱 함수는 구현하기 매우 어렵다(현실적으로 불가능하다)라고 알고 있습니다.
메모리는 무한정쓴다면 가능할지도 모르겠지만, 제한된 메모리 내에서는 충돌이 발생할 가능성이 있기 때문에
double hassing이나 progressive overflow, hash table이나 scatter table 와 같은 알고리즘이 나오던 게 아닌가요?
2011.07.06 03:04:14 (*.143.139.200)
뻐그
Hash function에 따라 collision이 발생할 수 있는 빈도가 차이가 있을 뿐 모든 경우에 대해 unique한 값을 가지는 것은 현실적으로 불가능한 것으로 알고 있습니다.
Cloudkiss님께서 말씀하신 것 처럼 collision이 발생하는 경우에 문제가 될 수 있는 overhead를 최대한 줄이기 위한 방법들이 존재하고요... 대학에서 사용하는 알고리즘 관련 교재만 참고하셔도 다양한 방법이 나와 있습니다.
2011.07.07 18:09:47 (*.148.164.35)
summerlight
bounded set에 대해서는 모든 경우에 대해 충돌이 일어나지 않음을 보장하는 perfect hashing 함수도 존재합니다만, unbounded set에 대해서 무충돌 hash는 없습니다. (당연한 일이죠)