powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Компактная нотация бинарной записи числа
25 сообщений из 83, страница 2 из 4
Компактная нотация бинарной записи числа
    #39582408
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonptr128если преобладают числа от 1 до 16, то битовое кодирование оправдано. Если нет, эффективней кодировать байтами или иным размером слова.
Вы фактически опровергли работы Левенштейна и Элиаса.
А поскольку автор еще не определилсяс диапазоном
Я ничего не опровергаю. Читайте внимательней. Я четко написал, когда выбор универсального кода оправдан. Не забывайте, что универсальные коды по определению не предназначены для случаев, когда распределение вероятностей известно.
ТС, кстати, изначально рассматривал число 255. Если речь идет о числах такого порядка, то ему точно лучше кодировать словами.
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582441
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Файл. В нем есть сколько-то бит всего, и часть из них можно сэкономить за счет более или менее правильного кодирования Первого Числа. Сколь велико оно? если оно всегда помещается в не более чем 256 байт то - структура - байт длинны - байты числа. Если оно не помещается в 256 байтов, то тогда на префикс нужно выделять два байта....

Так, суперправильный мегаспособ кодирования какой процент экономии даст по сравнению с менее правильными? на общей длине файла ((( ну так, мысли вслух((((
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582459
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582488
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakov,

одно число перед строкой - это упрощённая постановка задачи. А если нужно не одно число там разместить, а 100500?
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582555
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSVladimir Baskakov,

одно число перед строкой - это упрощённая постановка задачи. А если нужно не одно число там разместить, а 100500?

а тогда надо сразу задавать вопрос, тот который надо, а не другой. С привходящими ограничениями. чтобы отвечающих в заблуждение не вводить ((((
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582571
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakov,

извините, а какая разница: "произвольное содержание" файла после первого числа вполне может быть другим числом.
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582576
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSодно число перед строкой - это упрощённая постановка задачи. А если нужно не одно число там разместить, а 100500?
Объяви число 0 концом файла, а дальше так:
Код: sql
1.
размер1, значение1, размер2, значение2, ... размерN, значениеN, 0
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582579
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSVladimir Baskakov,

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

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

так то в каком-то смысле ==все файлы состоят из чисел== ....
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582629
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakov,

файлы состоят из чисел, да не из тех (из битов). Мы обсуждаем компактное представление натурального числа битовой записью в ситуации, когда адрес первого бита этой записи известен к моменту начала чтения этой записи (то есть этот адрес может быть описан как "первый бит после чего-то там", например, "первый бит в начале файла"; но может быть и "первый бит после окончания считывания предыдущего числа").
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582635
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TОбъяви число 0 концом файла, а дальше так:
Код: sql
1.
размер1, значение1, размер2, значение2, ... размерN, значениеN, 0


а какое битовое выражение для "запятой" использовать предлагаете?

И я ведь не сказал, что после 100500 чисел будет конец файла.
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582646
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSDima TОбъяви число 0 концом файла, а дальше так:
Код: sql
1.
размер1, значение1, размер2, значение2, ... размерN, значениеN, 0


а какое битовое выражение для "запятой" использовать предлагаете?
Никакой "запятой" не надо.

Это стандартный подход: писать размер данных, затем данные. Как записать размер я уже предложил 21089437

Иван FXSИ я ведь не сказал, что после 100500 чисел будет конец файла.
Назови 0 концом блока чисел.

В чем проблема?
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582663
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

проблема в том, что вы, кажется, совсем не заботитесь о компактности формата. В то время как вопрос звучал "Возможна ли более компактная нотация?"

В той нотации, которая описана в корневом посте, для записи чисел 0 и 1 требуется 2 бита , для 2 и 3 требуется 4 бита , для 4-7 требуется 6 битов и т.д.
_____________________
Причём видно, что даже в рамках этого подхода можно расходовать биты более экономно: поскольку 0 и 1 записываются в 2-битной нотации, то в 4-битной 0 и 1 уже не появятся, и можно впихнуть в неё 2, 3, 4 и 5 .

То есть:
"0 0" это 0
"0 1" это 1

"10 00" это 2
"10 01" это 3
"10 10" это 4
"10 11" это 5

"110 NNN" это c 6 до 13 (по формуле 6+NNN)

"1110 NNNN" это c 14 до 29 (по формуле 14+NNN)

и т.д.
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582674
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любопытно, что если следовать Хаффману, то нужно инвертировать префиксы, объявляющие длину битовой записи "тела" числа. То есть, например:

"1111110 0" это 0
"1111110 1" это 1

"111110 00" это 2
"111110 01" это 3
"111110 10" это 4
"111110 11" это 5

"11110 NNN" это c 6 до 13 (по формуле 6+NNN)

"1110 NNNN" это c 14 до 29 (по формуле 14+NNNN)

"110 NNNNN" это c 30 до 61 (по формуле 14+NNNNN)

"10 NNNNNN" это c 62 до 125 (по формуле 61+NNNNNN)

"0 NNNNNNN" это c 126 до 253 (по формуле 125+NNNNNNN)
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582686
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSпроблема в том, что вы, кажется, совсем не заботитесь о компактности формата. В то время как вопрос звучал "Возможна ли более компактная нотация?"
Вопрос 21097085 прозвучал так
Иван FXSА если нужно не одно число там разместить, а 100500?

А какую нотацию ты решишь использовать - не имеет значения.

Иван FXSВ той нотации, которая описана в корневом посте, для записи чисел 0 и 1 требуется 2 бита , для 2 и 3 требуется 4 бита , для 4-7 требуется 6 битов и т.д.
_____________________
Причём видно, что даже в рамках этого подхода можно расходовать биты более экономно: поскольку 0 и 1 записываются в 2-битной нотации, то в 4-битной 0 и 1 уже не появятся, и можно впихнуть в неё 2, 3, 4 и 5 .

То есть:
"0 0" это 0
"0 1" это 1

"10 00" это 2
"10 01" это 3
"10 10" это 4
"10 11" это 5

"110 NNN" это c 6 до 13 (по формуле 6+NNN)

"1110 NNNN" это c 14 до 29 (по формуле 14+NNN)

и т.д.
Что лучше зависит от того какие числа ты писать будешь чаще.
Например число 100500 (17 бит) в твоем варианте займет 34 бита, в моем 26 если добавить выкидывание старшей 1
Код: sql
1.
000101 0001 1000100010010100
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582692
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В твоей нотации запись числа N занимает 2 * log 2 (N) бит

а в моей 6 + log 2 (log 2 (N)) + log 2 (N)

Поэтому на числах порядка тысячи они сравняются и далее мой будет компактнее.
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582694
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В сухом остатке: в начале записи (перед телом числа) идет "имя диапазона", обозначающее одновременно и число бит в теле числа, и "базу диапазона" -- константу, к которой нужно прибавить двоичное число, выраженное этими битами тела числа, чтобы получить окончательный результат.

То есть:

"однобитныйдиапазон 0" и "однобитныйдиапазон 1" - это запись двух чисел: База(1)+0 и База(1)+1;

"двухбитныйдиапазон NN" - это запись четырёх чисел: База(2)+0, База(2)+1, База(2)+2 и База(2)+3;

"трёхбитныйдиапазон NNN" - это запись 8 чисел - от База(3)+0 по База(3)+7;

"четырёхбитныйдиапазон NNNN" - это запись 16 чисел типа База(4)+NNN;

и так далее.

Словарь {"однобитныйдиапазон", "двухбитныйдиапазон", "трёхбитныйдиапазон","четырёхбитныйдиапазон", ... "М-битныйдиапазон"} должен обладать свойствами префиксности и оптимальности (для нашей задачи), то есть, например, битовые значения

0, 10, 110, 1110, ... (М_минус_одна_единица)0

-- должны быть распределены по нему в соответствии с нашими априорными ожиданиями частот записи нами разных чисел.

При этом для "хвоста" очень больших чисел, появление которых мы представляем совсем редким, должна работать дополнительная (к словарю) формальная нотация записи имён диапазонов:

(М_единиц)0

-- означающая "битовые тела" чисел, содержащие М+1 бит. Ну и базы, к которым нужно прибавлять двоичные числа, представленные этими битовыми телами, тоже будут рассчитываться по единой формуле ...
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582696
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как можно на запрос наиболее компактной нотации отвечать:
Dima TА какую нотацию ты решишь использовать - не имеет значения
?

Ваши заказчики такие ответы принимают?
____________________________
Dima Tесли добавить выкидывание старшей 1
то есть ваша нотация, как она была описана, уже сбойнула?
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582697
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSТо есть:

"однобитныйдиапазон 0" и "однобитныйдиапазон 1" - это запись двух чисел: База(1)+0 и База(1)+1;

"двухбитныйдиапазон NN" - это запись четырёх чисел: База(2)+0, База(2)+1, База(2)+2 и База(2)+3;

"трёхбитныйдиапазон NNN" - это запись 8 чисел - от База(3)+0 по База(3)+7;
...
Чтобы тебе считать проще было:
Код: sql
1.
2.
База(M) = 2^(M+1) - 2
Ширина диапазона М = 2^M
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582700
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

похоже на то. Там сдвиг будет зависеть от того, нужно ли нам -- по условию задачи -- иногда записывать число 0, или только натуральные числа.
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582703
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSКак можно на запрос наиболее компактной нотации отвечать:
Dima TА какую нотацию ты решишь использовать - не имеет значения
?

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

Иван FXSDima Tесли добавить выкидывание старшей 1
то есть ваша нотация, как она была описана, уже сбойнула?
Та тоже рабочая, но ее можно улучшить: 2 бита сэкономить.
Можно не писать первую единицу, т.к. старший разряд всегда 1.
Например число 17 (10001 2 ) можно записать как 0001 2
Остается вопрос как писать 0, как вариант указывать размер размера 000000.
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582707
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВопрос 21097085 прозвучал так
Иван FXSА если нужно не одно число там разместить, а 100500?это было не о том, как записать одно число "сто тысяч пятьсот", а о том, что, возможно, нужно будет размещать "стопяцот" чисел.
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582709
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТа тоже рабочая как ваша нотация справится с задачей записи числа

127213652436512428173512214698378623721714738352374 ?
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582711
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSDima TВопрос 21097085 прозвучал так
Иван FXSА если нужно не одно число там разместить, а 100500?
это было не о том, как записать одно число "сто тысяч пятьсот", а о том, что, возможно, нужно будет размещать "стопяцот" чисел.
И ... ? Какое из двух окончаний ты не дописал:
1. Я хочу сделать это максимально компактно.
2. Я не знаю как записать несколько чисел.

Я подумал про второе, т.к. первое многократно обсудили выше. Хотя не удивлюсь если окажется третье.
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582714
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я как раз знаю, как записать несколько чисел: сначала первое, потом вплотную к нему (без всяких запятых) второе и т.д.
...
Рейтинг: 0 / 0
Компактная нотация бинарной записи числа
    #39582789
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSDima TТа тоже рабочая как ваша нотация справится с задачей записи числа

127213652436512428173512214698378623721714738352374 ?
Никак. Мой формат подразумевает максимальное значение. Я же писал 21089437 что до 2^64.
Можно 1 бит добавить в размер размера и будет максимум 2^128 и т.д.

Если надо такие числа в больших количествах, то есть смысл подумать про вариант 21089482 , в том виде он до 2^256 (примерно 75+ десятичных разрядов), если 1 бит добавить станет до 2^65536.
Хотя не такая уж и шутка там получилась, вот число 100500 в том формате:
Код: sql
1.
011 01 0001 1000100010010100


25 бит, на 1 бит короче 21098396 , т.е. чем больше числа тем еще короче будет по сравнению с другими способами записи.

PS Идеального решения этой задачи не существует, поэтому надо затачивать решение под ожидаемые данные. Как вариант отдельно задавать тип кодирования чисел и использовать тот, который окажется короче в данном конкретном случае.
...
Рейтинг: 0 / 0
25 сообщений из 83, страница 2 из 4
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Компактная нотация бинарной записи числа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]