Выбор магического байта с наименьшей вероятностью появления в реальных данных

Я надеюсь, что это не слишком самоуверенно для SO; у него может не быть хорошего ответа.

В части библиотеки, которую я пишу, у меня есть массив байтов, который заполняется значениями, предоставленными пользователем. Эти значения могут быть типа Float, Double, Int (разных размеров) и т. д. с двоичным представлением, которое вы можете ожидать, скажем, от C. Это все, что мы можем сказать о ценностях.

У меня есть возможность для оптимизации: я могу инициализировать свой массив байтов байтом MAGIC, а затем всякий раз, когда нет байта в введенном пользователем значении равно MAGIC, я могу выбрать быстрый путь, иначе я нужно идти медленным путем.

Итак, мой вопрос: каков принципиальный способ выбора моего магического байта, чтобы он с достаточной вероятностью не отображался в (различно закодированных и распределенных) данных, которые я получаю?

Часть моего вопроса, я полагаю, заключается в том, существует ли что-то вроде закона Бенфорда, который может определить мне кое-что о распределении байтов во многих видах данных.


person jberryman    schedule 21.11.2014    source источник
comment
Посмотрите на имеющиеся у вас данные, закодированные и распределенные по-разному, и выберите наименее частый байт? Если у вас еще нет никаких данных, сделайте свой магический байт переменной и перепишите свою программу, чтобы время от времени перевыбирать магический байт на основе наименее частого байта в ваших полученных данных? Кроме того, магические числа обычно имеют длину более 8 бит, чтобы увеличить вероятность уникальности.   -  person bzlm    schedule 22.11.2014


Ответы (1)


Собирайте реальные данные из разнообразного набора входных данных, которые будут использоваться приложениями вашей библиотеки.

Напишите быструю и грязную программу для анализа набора данных. Похоже, вы хотите знать, какие байты чаще всего полностью исключаются. Таким образом, вывод программы будет говорить для каждого значения байта, сколько входных данных не содержат его.

Это не то же самое, что наименее частый байт. При анализе данных вам нужно быть осторожным, чтобы точно помнить, что вы измеряете!

Используйте анализ для определения вашей архитектуры. Если ни один байт никогда не появляется, вы можете полностью отказаться от оптимизации.

person Potatoswatter    schedule 21.11.2014
comment
Если количество вхождений может быть равно 0, то это, безусловно, то же самое, что и наименее частый байт. Не усложняйте вещи. :) - person bzlm; 22.11.2014
comment
@bzlm И если ноль не является результатом программы анализа, вам нужно написать совершенно новую программу. Это менее сложно? - person Potatoswatter; 22.11.2014
comment
Похоже, вы хотите знать, какие байты чаще всего полностью исключаются. Таким образом, вывод программы будет говорить для каждого значения байта, сколько входных данных не содержат его. Правильно и правильно! Также я полагаю, что прошу слишком многого, чтобы иметь возможность выбирать такой байт, не задумываясь о том, как могут выглядеть данные реального мира... - person jberryman; 22.11.2014