나는 사용자가 미리 결정한 고유 식별자를 가져 와서 해시하고이를 사용자 이름에 사전 매핑으로 저장하는 프로그램을 만들었습니다. 나는 나중에 고유 한 식별자를 받고, 다시 해쉬하고, 사용자의 이름을 조회 할 수 있습니다.파이썬 해시() 충돌 처리
개인의 9 자리 고유 ID hash()가 다른 사람과 동일한 숫자로 문제가 발생했습니다. 이는 약 40 명의 사용자에 대한 데이터를 수집 한 후에 발생합니다.
일반적인 문제가 있습니까? 나는 해쉬 맵을 사용하는 것과는 다르다고 생각한다. 해시 된 ID를위한 버킷을 생성하면, 사용자가 누구인지 (버킷 또는 초의 첫 번째 항목이든) 알 수 없기 때문이다.
편집 :
id = raw_input()
hashed_id = hash(id)
if not dictionary.has_key(hashed_id):
name = raw_input()
dictionary[hashed_id] = name
check_in_user(dictionary[hashed_id])
이 때문에 사전과 세트에서 '__hash__' ** 및 **'__eq__'을 모두 구현해야하므로 충돌시 다시 확인할 수 있습니다. [mcve]가 없으면 무엇이 필요한지를 구체적으로 제안하는 것이 어렵습니다. – jonrsharpe
고유 식별자의 해시 대신 고유 식별자를 사전의 키로 사용하면 어떨까요? 식별자는 고유하므로 충돌이 없어야합니다. – Kevin
당신의 불행 (또는 행운)은 경건한 비율 일 것입니다.하지만 다른 사용자들이 말했듯이, 당신이해야 할 일은 ** 저장된 해시 값 **에 대해 ** 입력 된 해시 값을 확인하는 것입니다. 사용자**; 모든 사용자가 아닙니다. –