매우 작은 데이터 패킷을받는 장치로 작업하고 있습니다. 장치는 48 비트 키로 고유하게 식별됩니다. 장치가 개별 패킷을 수신하면 패킷을 읽고 해당 패킷이 해당 장치 용인지 여부를 확인해야합니다. 간단하지만, 패킷에는 16 비트 키만 저장할 공간이 충분합니다.48 비트 키를 16 비트 값으로 해싱
통신 프로토콜을 변경할 수 없습니다. 패킷에 여러 패킷이나 다른 필드를 사용할 수 없습니다. 기본적으로이 48 비트 식별자를 16 비트 필드에 저장해야합니다. 분명히 어떤 해결책과도 충돌 할 것입니다.
원본 키의 하위 16 비트를 보내거나 해시하는 것을 고려하고있었습니다. 충돌을 최소화하면서이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
추신 : 실제로 원래의 키의 처음 3 바이트가 항상 같아서이 문제가 24 비트 키를 16 비트 키로 밀어 넣는 것으로 줄었습니다.
PPS : 충돌은 치명적이지 않습니다. 장치는 복구 할 수 있지만 비용이 많이 듭니다.
"충돌을 최소화하면서 이렇게하는 가장 좋은 방법은 무엇입니까?" "사용 된 값의 할당 및 배포에 대해 알지 못하면 대답 할 수 없습니다. – RBarryYoung
개인 키가 임의로 생성되면 해시 키를 사용하여 16 비트 하위 섹션을 가져 오는 것보다 충돌이 적게 발생하지 않습니다. 키가 중요하다면 키를 어둡게하는 것이 좋습니다. –
개별 장치를 프로그래밍 할 수 있습니까? 16 비트 키가 무엇인지 알려주도록 장치를 구성 할 수 있습니까? 모든 장치 ID가 앞에 있다는 것을 안다면 [최소 완벽한 해시]를 만들 수 있습니다 (http://en.wikipedia.org/wiki/Perfect_hash_function#Minimal_perfect_hash_function). 그러나 특정 패킷 번호를 찾기 위해 장치에 알리는 어떤 방법이 없으면 충돌 가능성은 0이 아닙니다. –