Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
maytonptr128если преобладают числа от 1 до 16, то битовое кодирование оправдано. Если нет, эффективней кодировать байтами или иным размером слова. Вы фактически опровергли работы Левенштейна и Элиаса. А поскольку автор еще не определилсяс диапазоном Я ничего не опровергаю. Читайте внимательней. Я четко написал, когда выбор универсального кода оправдан. Не забывайте, что универсальные коды по определению не предназначены для случаев, когда распределение вероятностей известно. ТС, кстати, изначально рассматривал число 255. Если речь идет о числах такого порядка, то ему точно лучше кодировать словами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 12:15 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Файл. В нем есть сколько-то бит всего, и часть из них можно сэкономить за счет более или менее правильного кодирования Первого Числа. Сколь велико оно? если оно всегда помещается в не более чем 256 байт то - структура - байт длинны - байты числа. Если оно не помещается в 256 байтов, то тогда на префикс нужно выделять два байта.... Так, суперправильный мегаспособ кодирования какой процент экономии даст по сравнению с менее правильными? на общей длине файла ((( ну так, мысли вслух(((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 12:42 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
ASN.1 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 13:05 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Vladimir Baskakov, одно число перед строкой - это упрощённая постановка задачи. А если нужно не одно число там разместить, а 100500? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 13:43 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSVladimir Baskakov, одно число перед строкой - это упрощённая постановка задачи. А если нужно не одно число там разместить, а 100500? а тогда надо сразу задавать вопрос, тот который надо, а не другой. С привходящими ограничениями. чтобы отвечающих в заблуждение не вводить (((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 14:59 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Vladimir Baskakov, извините, а какая разница: "произвольное содержание" файла после первого числа вполне может быть другим числом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 15:09 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSодно число перед строкой - это упрощённая постановка задачи. А если нужно не одно число там разместить, а 100500? Объяви число 0 концом файла, а дальше так: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 15:18 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSVladimir Baskakov, извините, а какая разница: "произвольное содержание" файла после первого числа вполне может быть другим числом. разница большая. в том, как оптимизировать, что и на сколько, и какой ценой. и надо ли вообще. это кмк сильно зависит от длинны чисел, распределения вероятности маленьких и больших. Оптимальный метод упаковки разным будет ..... Нужно ли быстро выделять из ==последовательности упакованных== по номеру. Т.е. чтобы понять упаковку, надо понимать и жизненный цикл массива данных..... так то в каком-то смысле ==все файлы состоят из чисел== .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 15:21 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Vladimir Baskakov, файлы состоят из чисел, да не из тех (из битов). Мы обсуждаем компактное представление натурального числа битовой записью в ситуации, когда адрес первого бита этой записи известен к моменту начала чтения этой записи (то есть этот адрес может быть описан как "первый бит после чего-то там", например, "первый бит в начале файла"; но может быть и "первый бит после окончания считывания предыдущего числа"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 15:56 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Dima TОбъяви число 0 концом файла, а дальше так: Код: sql 1. а какое битовое выражение для "запятой" использовать предлагаете? И я ведь не сказал, что после 100500 чисел будет конец файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 16:00 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSDima TОбъяви число 0 концом файла, а дальше так: Код: sql 1. а какое битовое выражение для "запятой" использовать предлагаете? Никакой "запятой" не надо. Это стандартный подход: писать размер данных, затем данные. Как записать размер я уже предложил 21089437 Иван FXSИ я ведь не сказал, что после 100500 чисел будет конец файла. Назови 0 концом блока чисел. В чем проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 16:10 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
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) и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 16:27 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Любопытно, что если следовать Хаффману, то нужно инвертировать префиксы, объявляющие длину битовой записи "тела" числа. То есть, например: "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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 16:40 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 16:59 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
В твоей нотации запись числа N занимает 2 * log 2 (N) бит а в моей 6 + log 2 (log 2 (N)) + log 2 (N) Поэтому на числах порядка тысячи они сравняются и далее мой будет компактнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 17:13 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
В сухом остатке: в начале записи (перед телом числа) идет "имя диапазона", обозначающее одновременно и число бит в теле числа, и "базу диапазона" -- константу, к которой нужно прибавить двоичное число, выраженное этими битами тела числа, чтобы получить окончательный результат. То есть: "однобитныйдиапазон 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 бит. Ну и базы, к которым нужно прибавлять двоичные числа, представленные этими битовыми телами, тоже будут рассчитываться по единой формуле ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 17:18 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Как можно на запрос наиболее компактной нотации отвечать: Dima TА какую нотацию ты решишь использовать - не имеет значения ? Ваши заказчики такие ответы принимают? ____________________________ Dima Tесли добавить выкидывание старшей 1 то есть ваша нотация, как она была описана, уже сбойнула? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 17:25 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 17:26 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Dima T, похоже на то. Там сдвиг будет зависеть от того, нужно ли нам -- по условию задачи -- иногда записывать число 0, или только натуральные числа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 17:35 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSКак можно на запрос наиболее компактной нотации отвечать: Dima TА какую нотацию ты решишь использовать - не имеет значения ? Ваши заказчики такие ответы принимают? Эээ ... попробуй еще раз почитать вопрос на который я там ответил. Там я на совсем другой вопрос отвечал, который возник в ходе обсуждения. Вопрос процитировал. Иван FXSDima Tесли добавить выкидывание старшей 1 то есть ваша нотация, как она была описана, уже сбойнула? Та тоже рабочая, но ее можно улучшить: 2 бита сэкономить. Можно не писать первую единицу, т.к. старший разряд всегда 1. Например число 17 (10001 2 ) можно записать как 0001 2 Остается вопрос как писать 0, как вариант указывать размер размера 000000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 17:37 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Dima TВопрос 21097085 прозвучал так Иван FXSА если нужно не одно число там разместить, а 100500?это было не о том, как записать одно число "сто тысяч пятьсот", а о том, что, возможно, нужно будет размещать "стопяцот" чисел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 17:44 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Dima TТа тоже рабочая как ваша нотация справится с задачей записи числа 127213652436512428173512214698378623721714738352374 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 17:46 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSDima TВопрос 21097085 прозвучал так Иван FXSА если нужно не одно число там разместить, а 100500? это было не о том, как записать одно число "сто тысяч пятьсот", а о том, что, возможно, нужно будет размещать "стопяцот" чисел. И ... ? Какое из двух окончаний ты не дописал: 1. Я хочу сделать это максимально компактно. 2. Я не знаю как записать несколько чисел. Я подумал про второе, т.к. первое многократно обсудили выше. Хотя не удивлюсь если окажется третье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 17:51 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
я как раз знаю, как записать несколько чисел: сначала первое, потом вплотную к нему (без всяких запятых) второе и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 17:53 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSDima TТа тоже рабочая как ваша нотация справится с задачей записи числа 127213652436512428173512214698378623721714738352374 ? Никак. Мой формат подразумевает максимальное значение. Я же писал 21089437 что до 2^64. Можно 1 бит добавить в размер размера и будет максимум 2^128 и т.д. Если надо такие числа в больших количествах, то есть смысл подумать про вариант 21089482 , в том виде он до 2^256 (примерно 75+ десятичных разрядов), если 1 бит добавить станет до 2^65536. Хотя не такая уж и шутка там получилась, вот число 100500 в том формате: Код: sql 1. 25 бит, на 1 бит короче 21098396 , т.е. чем больше числа тем еще короче будет по сравнению с другими способами записи. PS Идеального решения этой задачи не существует, поэтому надо затачивать решение под ожидаемые данные. Как вариант отдельно задавать тип кодирования чисел и использовать тот, который окажется короче в данном конкретном случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2018, 19:55 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39582674&tid=1340186]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
173ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 272ms |
| total: | 545ms |

| 0 / 0 |
