2014-11-21 5 views
3

저는 이것이 너무 그렇다고 생각하지 않기를 바랍니다. 좋은 대답이 없을 수도 있습니다.실제 데이터에 표시 될 가능성이 가장 적은 마법 바이트를 선택하십시오.

내가 쓰고있는 라이브러리의 일부에는 사용자가 제공 한 값으로 채워지는 바이트 배열이 있습니다. 이 값들은 부동 소수점 형, Double 형, Int 형 (다른 크기) 등으로 C에서 기대할 수있는 바이너리 표현식을 가질 수 있습니다. 이것이 우리가 가치에 대해 말할 수있는 전부입니다.

나는 최적화를위한 기회를 가질 : 는 사용자가 제공 한 값을 더 바이트, 나는 빠른 경로를 취할 수 MAGIC 동일하지, 그렇지 않으면 내가 필요할 때마다 그때 바이트 MAGIC 내 바이트 배열을 초기화 할 수 있습니다 느린 길을 택하십시오.

제 질문은 : 마법 바이트를 선택하는 원칙은 무엇입니까? 그렇다면 받아 들여지는 (다양하게 인코딩되고 배포 된) 데이터에 나타나지 않을 가능성이 있습니까?

제 질문 중 일부는 여러 가지 종류의 데이터에서 바이트 분포에 대해 알 수있는 Benford's law과 같은 것이 있는지 생각해보십시오.

+0

다양한 인코딩 및 분산 데이터를보고 최소 빈도를 선택하십시오. 아직 데이터가 없다면 매직 바이트 변수를 만들고 프로그램을 다시 작성하여 수신 된 데이터의 최소 빈도를 기반으로 매시 바이트를 매번 다시 선택하십시오. 또한, 매직 넘버는 일반적으로 8 비트 이상으로, 유일성의 확률을 증가시킵니다. – bzlm

답변

2

라이브러리 응용 프로그램에서 사용할 다양한 입력 집합에서 실제 데이터를 캡처합니다.

데이터 집합을 분석하기위한 빠르고 더러운 프로그램을 작성하십시오. 어떤 바이트가 가장 자주 자주 제외되는지 알고 싶은 것 같습니다. 그래서 프로그램의 출력은 각 바이트 값에 대해 얼마나 많은 입력이 그것을 포함하고 있지 않은지 말할 것입니다.

이것은 이 아니며과 같으며 최소 빈도 바이트입니다. 데이터 분석에서는 측정 대상을 정확하게 염두에 두어야합니다.

분석을 사용하여 아키텍처를 정의하십시오. 바이트가 나타나지 않으면 최적화를 완전히 포기할 수 있습니다.

+0

발생 횟수가 0 일 수 있으면 가장 빈번한 바이트와 확실히 동일합니다. 지나치게 복잡하게하지 마십시오. :) – bzlm

+0

@bzlm 그리고 분석 프로그램의 결과가 0이 아니면 완전히 새로운 프로그램을 작성해야합니다. 그렇게 덜 복잡합니까? – Potatoswatter

+0

"어떤 바이트가 가장 자주 빈번하게 배제되는지를 알고 싶은 것처럼 들리므로 프로그램의 출력은 각 바이트 값에 대해 얼마나 많은 입력이 포함되어 있지 않은지 말할 것입니다." 정확하고 좋은 지적! 또한 실제 데이터가 어떻게 보이는지에 대한 생각없이 그러한 바이트를 선택할 수 있을지 너무 많이 묻는 것 같아요. – jberryman