Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Пусть есть задача в начале некоторого большого файла произвольного содержания записывать одно целое число, тоже произвольное. Проблема в том, что за записью этого числа (по условию задачи) идут какие-то не зависящие от него биты. Как указать, где оканчивается "тело" числа? Очевидно, возможны разные нотации записи этого числа. Например, если бинарная запись этого числа состоит из К битов, сначала ставить К-1 единиц, потом "0", потом само число. То есть для числа 255 получаем вид: "1111111011111111тело_файла..." Возможна ли более компактная нотация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 11:21 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Я так понимаю, что число не ограничено сверху? но какая-то вменяемая граница количества битов в нём есть? 4kkk хватит? Выдели первые 4 байта на количество битов своего числа, потом само число, потом независимый хвост. 4Г мало? выдели 8 байт всё равно столько на диск не поместится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 11:40 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
M бит размер числа, К бит число, тело. Размер M фиксированный, т.е. выбрать с запасом чтобы все возможные К входили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 11:44 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Akina, запись числа 1 займёт 8 байт + 1 бит? Это компактно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 11:44 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSзапись числа 1 займёт 8 байт + 1 бит? Это компактно? Можно еще размер размера писать, для 2^64 потребуется 6 бит т.е. для числа 1 запись такая: Код: sql 1. всего 1 байт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 12:00 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSВозможна ли более компактная нотация? Цель выбрать надо: компактизация в среднем или каждый раз? Может "оптимальное кодирование" что-то подскажет (подразумевается минимизация с целью передачи по каналам связи.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 12:02 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Dima TМожно еще размер размера писать, для 2^64 потребуется 6 бит т.е. для числа 1 запись такая: Код: sql 1. всего 1 байт А если размер размера размера добавить, то 6 бит хватит Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 12:06 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Dima T, да, размер размера, пожалуй. То есть нужно как-то в более конкретных условиях задачи найти/обосновать выбор -- ограничиться ли размером_размера, или нужно даже с размера_размера_размера начинать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 12:09 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSDima T, да, размер размера, пожалуй. То есть нужно как-то в более конкретных условиях задачи найти/обосновать выбор -- ограничиться ли размером_размера, или нужно даже с размера_размера_размера начинать ... Для записи числа размером 2^64 бит потребуется 2 млн. террабайт. Т.е. можно смело предположить что писать больше 2^64 точно не потребуется, поэтому достаточно варианта с размером размера 21089437 . Про "размер размера размера" шутка была. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 12:18 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSDima T, да, размер размера, пожалуй. То есть нужно как-то в более конкретных условиях задачи найти/обосновать выбор -- ограничиться ли размером_размера, или нужно даже с размера_размера_размера начинать ... Посмотри Код Левенштейна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 13:47 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXS, Можно воспользоваться следующей логикой: для самого числа используем 7 бит из 8 каждого байта. Последний байт имеет первым битом 0, остальные байты - 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 23:38 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
В BCD-арифметике можно сохранять. Быстро парсится в десятичную. В системе Фибоначчи можно хранить. Уверен что этот вариант проще чем Левенштейн. Хотя возможно менее компактный на больших значениях. Да мало-ли... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 00:16 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Код Левенштейна в Википекдии как-то муторно описан, а другое описание я искать поленился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 00:26 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Разумеется не надо тебе его реализовывать. Надо найти готовую реализацию. А кодить свою - это действительно муторно. Особенно в части тестирования. И поиска багов уже в реализации под разные платформы. Полюбому что-то вылезет пузом. Толи сдвиг (>>) толи битовые операции толи ХЗ что. Ты кстати зачем своё кодишь? Спортивный интерес? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 00:32 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Реально размышляю про архиватор. По-дилетантски, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 00:41 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXS, полезная тема. Особенно когда свои структуры данных создаешь. Некоторое время назад я предложил форуму написать утилиту для поиска уникальных строк в большом текстовом файле. И ты не поверишь, сколько идей было. И Диме - спасибо. И даже сердитый Зяма отметился. Но вот в чем штука. Любая хорошая идея требовала тщательно продумать как в памяти распределить структуры данных. Биткарты там.. хеш-таблички... деревья. Найти золотую пропорцию. А там еще столько технических нюансов - мама не горюй. И строки... и поиск и алгоритмизация и оптимизация. Вобщем у меня от этой задачи так голова разболелась что я даже ее отложил на годик. И хотя свои собственные решения для себя - очевидны как божий день - но когда занимашеся перфекционизмом то эти решения тухнут так и не выйде в альфа версию. И ты смотришь на них такой и думаешь... а задлянахрена вообще это? Так - то.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 00:50 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
maytonПосмотри Код Левенштейна. Во-первых, Омега-код Элиаса на один бит экономичней. Во-вторых, оба кода дают экономию для чисел меньше 16, и перестают быть экономичными для 16 и более. То есть, если преобладают числа от 1 до 16, то битовое кодирование оправдано. Если нет, эффективней кодировать байтами или иным размером слова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 11:10 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
ptr128, вопрос не в кодировании самом по себе, а в том ЕЩЁ, чтобы отделить запись числа от следующих непосредственно за ней произвольных битов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 12:08 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSptr128, вопрос не в кодировании самом по себе, а в том ЕЩЁ, чтобы отделить запись числа от следующих непосредственно за ней произвольных битов. Это я понимаю, но в чем проблема, если кодирование не битовое, а по словам? То есть длина кода всегда кратна N бит, а сам код позволяет определить количество слов по N бит. Даже если слово у нас 8 бит (байт), то совсем не обязательно выравнивать его на границу байта в файле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 12:44 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSПусть есть задача в начале некоторого большого файла произвольного содержания записывать одно целое число, тоже произвольное. Проблема в том, что за записью этого числа (по условию задачи) идут какие-то не зависящие от него биты. Как указать, где оканчивается "тело" числа? Очевидно, возможны разные нотации записи этого числа. Например, если бинарная запись этого числа состоит из К битов, сначала ставить К-1 единиц, потом "0", потом само число. То есть для числа 255 получаем вид: "1111111011111111тело_файла..." Возможна ли более компактная нотация?тут снова можно обратиться к Шеннону, который все это обдумал еще в 1945 году :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 15:27 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSвопрос не в кодировании самом по себе, а в том ЕЩЁ, чтобы отделить запись числа от следующих непосредственно за ней произвольных битов. В теори кодирования это свойство называется префиксностью. Необязательно префикс в программистском смысле. Есть срогое определение, не помню только. В пересказе - примерно то самое, что требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 15:34 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
"Префиксность" -- это про все подстроки строки. А здесь - только в одном месте, в начале строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 15:41 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
А вот и нет. Это относится к методу кодирования (строке, закодированной метдом). Я подразумевал, что заголовок строки и собственно строка "закодированы" разными методами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 17:16 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
ptr128maytonПосмотри Код Левенштейна. Во-первых, Омега-код Элиаса на один бит экономичней. Во-вторых, оба кода дают экономию для чисел меньше 16, и перестают быть экономичными для 16 и более. То есть, если преобладают числа от 1 до 16, то битовое кодирование оправдано. Если нет, эффективней кодировать байтами или иным размером слова. Во первых я ничуть не против кодов Элиаса. Во вторых во втором вашем тезисе есть заявление о том что "эффективней кодировать байтами". Это странно. Вы фактически опровергли работы Левенштейна и Элиаса. Чтобы что-то кодировать байтами или иным размером слова вы должны вернуться к началу и определиться с диапазоном. А поскольку автор еще не определился с диапазоном - то спорить не о чем. Если вы решили кодировать "байтами" то вам все равно необходимо где-то хранить длину байтов и мы неизбежно приходим к префиксным или унарным или любым другим способам кодирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 22:56 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
S.G.тут снова можно обратиться к Шеннону, который все это обдумал еще в 1945 году :) Работы Шеннона относились к проблемам и вызовам которые стояли в середине 20-го века. Шеннон оперировал понятием "символа". Это понятие возникло задолго до байта или бита. Символ - это единица информации в телеграфе. В телексе. И в прочих простых устройствах связи которые работали по аналаговым каналам. Нисколько не умаляя работ этого замечательного инженера я скажу что он жил в своё время и писал про своё. И актуальность и применимость его исследований к современным архиваторам - весьма ограничена. Так-же как и работы Дональда Кнута для современного веб-разработчика. Большая часть материала - не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 23:06 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Вообще, конкретный оптимальный алгоритм будет зависеть от распределения получаемых значений по диапазону. Вот например вариант [длина + значение]: Разбиваем значение на диапазоны, с разрядностью кратной 4 битам, т.е.: 0..15, 16..270, 271..4365, ... Сначала записываем длину в блоках, причём размер длины кратен 2м битам, т.е.: 00 = 1, 01 = 2, 10 = 3, 1100 = 4, 1101 = 5, ... После длины идёт N*4 бит числа. Число 100500 будет записано как 1101 0001 1000 1000 1001 0100 -> 24 бита. Число '127213652436512428173512214698378623721714738352374' в двоичную систему переводить лень, но оно займет 196 бит. Имеется некоторая избыточность (например, число 1 займёт 6 бит), но без этого никуда :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2018, 02:58 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
alekcvpЧисло 100500 будет записано как 1101 0001 1000 1000 1001 0100 -> 24 бита. На самом деле: 1101 0000 0111 0111 1000 1000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2018, 03:03 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Как бы писал я. Я бы меньше байта не мельчил - только расстраиваться. У каждого байта я бы считал старший разряд флагом конца числа. А младшие семь - значимыми разрядами. И число 0-127 помещались бы в один байт, 0.....128*128-1 - в два байта и так далее. Двухбайтные из диапазона 0....127 я бы оставил себе на память как эскейп- коды. Если жалко терять один бит из восьми, то тогда бы брал слова (или двойные слова) с битом-флагом. Тогда потери на флаг конца - 1/16 32 64 - Это хорошо. Но, диапазон ноль-127 кодируется в два байта - это небольшая потеря, если маленьких чисел мало, большая - если много. Опять же, если чисел в диапазоне 0...32000 мало, в общем объеме, то флагом можно снабжать уже не слово, а двойное, или даже четверное слово. Или даже кусок бОльшей разрядности. В зависимости от того, насколько большие числа в среднем - выгодно будет использовать кусочки разной длины. Для переключения между разрядностью зафлагированного куска - вышеупомянутые эскейп - коды. Наверное, похожим образом устроены коды символов в utf. - не знаю толком, возможно. Мне кажется,что в контексте задачи можно поизучать устройство многобайтных кодировок символов, ну и устройство библиотек по работе с ними..... Мне думается,что заметно более сложные алгоритмы кодировки не дадут заметной выгоды с одной стороны, и сделают чтение- запись труднее - с другой. Но нужна все же статистика - каких чисел в потоке много, каких - мало, без этого решать вопрос о кодировании оптимальном неправильно..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2018, 10:07 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovЯ бы меньше байта не мельчил - только расстраиваться. У каждого байта я бы считал старший разряд флагом конца числа. А младшие семь - значимыми разрядами. И число 0-127 помещались бы в один байт, 0.....128*128-1 - в два байта и так далее. Зачем вы оперируете байтами? В битовом потоке решительно все равно. Вообще если брать Левенштейна, и ему подобные (с унарным префиксом) то изначально предполагается что меньшие числа занимают меньшую разрядную сетку. Но если изначально гистограмма чисел идущих на вход известна и имеет некий перекос (чаще встречаются большие числа чем меньшие) то тогда Омега*, Левенштейн* и прочие теряют смысл. Нужно искать другие подходы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2018, 12:46 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Mayton - байтами удобно работать процессору. Это может быть неидеальный код, на байтах. Но. Он не запредельно хуже хорошего, который на битовой строке. И немного заплатить эффективностью за удобство работы по моему, на практике, вполне логично. И, я согласен с мнением ранее высказанным в теме - не имея представления о гистаграмме входного массива, оценивать эффективность кода невозможно.... Как с сортировкой - каждому алгоритму можно подобрать такой набор входной, что он поработает подольше. То есть, если задачу рассматривать как игру разума - то тогда битовый массив, а только соберешься в сторону прикладного - байты, слова, двойные и четверные - тут как тут.... Ну, мнение. Уважаю тех, кто способен к более абстрактному, менее приземленному мышлению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2018, 13:38 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
В конце концов, ну давайте нагоним тест. На вход впихнем поток рандомных натуральных 0...2^64-1. И посмотрим, какой компактификатор сделает среднюю битность меньше 60? В среднем 64 разрядном числе вероятность иметь 64 бита - половина, больше 62 - 3/4, больше 61 - 7/8, > 60 ----- 15/16..... И так далее. В общем средняя длина в битах числа из равномерного рандомного потока - немногим меньше разрядности. Исхитряйся или нет. Если поток сильно отличается от равномерного, и мелочи там много - тогда конечно дело другое. Но, как справедливо отмечали выше, тогда эту неравномерность и перекос надо описывать? Перед моделированием для битвы кодировок, в которой побеждает компактнейшая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2018, 14:38 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovВ конце концов, ну давайте нагоним тест. На вход впихнем поток рандомных натуральных 0...2^64-1. И посмотрим, какой компактификатор сделает среднюю битность меньше 60? В среднем 64 разрядном числе вероятность иметь 64 бита - половина, больше 62 - 3/4, больше 61 - 7/8, > 60 ----- 15/16..... И так далее. В общем средняя длина в битах числа из равномерного рандомного потока - немногим меньше разрядности. Это немного разные задачи ИМХО. Исходная задача была: использовать для записи числа минимально необходимое число бит. Т.е. не записывать 32-х разрядные числа 64ю битами и т.п, но при этом иметь возможность записать число любой разрядности. А вы хотите сжимать поток 64-х разрядных чисел с равномерным распределением значенией, а это уже конкретно сжатие, к тому же случайных [в общем случае] данных. Разные задачи - разные решения, к тому же вторая задача [в случае действительно случайных данных с равномерным распределением] решения [скорее всего] не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 02:18 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
alekcvpсжимать поток 64-х разрядных чисел с равномерным распределением значенией ... [в случае действительно случайных данных с равномерным распределением] решения [скорее всего] не имеет если нам дан поток "действительно случайных данных с равномерным распределением", то он нам дан в какой-то нотации ("битовой нотации", поскольку в компе есть только биты). Вопрос "удастся ли сжать" имеет смысл только с указанием двух нотаций -- исходной и сжатой. Так почему исходную нотацию нельзя сжать? Потому что нотации вообще все одинаково компактны или потому что исходная всегда самая компактная? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 10:13 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Давайте уточним формулировку. Например, создать битовый код для натуральных чисел 1...N , позволяющий записывать их в поток и считывать в произвольном количестве и порядке, такой что сумма битовых длинн по всему набору была минимальна? Или как? Или с доп ограничением, что длинна битовой последовательности для маленького числа была заметно меньше, чем для числа очень большого? или доп- требование минимакса - чтобы максимальная длинна кодирующей последовательности по всему набору была как можно меньше? Для последнего выгодно кодирование в равной разрядности. ---- критерии к.м.к. не заданы точно, отсюда разночтения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 10:20 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Для кодировки произвольного натурального числа можно построить ф-цию R(n) - сколько разрядов бинарного представления нужно для представления числа n. Какой интеграл, или максимум, или еще чего от этой ф-ции мы оптимизируем на всем множестве возможных кодировок? Понятно, что наитупейшая кодировка такова - столько единичек, какое число а потом нолик. Такими кодами можно кодить любое натуральное и r(n)=n по такому случаю, Самая остроумная кодировка по моему не может давать стабильно лучше чем log 2 (N). какой интеграл от ф-ции разрядности соответствует интуитивному идеалу --компактного представления числа-- ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 10:43 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
В принципе, я могу предложить простенькую кодировку для r(n) = A* log B (n) + C. Например берем X. Кодируем n. В системе по основанию 2^x-1 - если икс=2 - то в троичной. Каждому знаку этой кодировки ставим в соответствие ее двоичный код, разрядности икс. При этом, одна битовая последовательность у нас осталась незанятой - ее мы используем как признак окончания числа. Ну вот, вышли на логарифмическую метрику, с константами A, B, C. Она хорошая, или нет? И почему? В каком смысле другие ==кодировки== лучше или хуже..... практичнее? В принципе, вариант ==байт с маркером== дает такую же метрику чем больше икс, тем меньше лишних разрядов будет на больших числах, но больше - на маленьких, вроде так....... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 11:01 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSСловарь {"однобитныйдиапазон", "двухбитныйдиапазон", "трёхбитныйдиапазон","четырёхбитныйдиапазон", ... "М-битныйдиапазон"} должен обладать свойствами префиксности и оптимальности (для нашей задачи), то есть, например, битовые значения 0, 10, 110, 1110, ... (М_минус_одна_единица)0 -- должны быть распределены по нему в соответствии с нашими априорными ожиданиями частот записи нами разных чисел. -- вот там (точнее на одну реплику выше) у меня было озарение, что ставить самое короткое префиксное слово "0" для обозначения "однобитногодиапазона"-- множества занимающих один бит чисел, -- которых всего два: 0 и 1, ... это совсем не компактно. А если тупо инвертировать порядок префиксных слов, то получаем нотацию с одинаковым размером записи слов по всему диапазону от "однобитных" до "М-битных" ... и почему тогда не пользоваться самой обычной нотацией с фиксированным размером записи числа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 11:11 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Vladimir Baskakov простенькую кодировку для r(n) = A* log B (n) + C. Например берем X лично я не понял, как у вас тут соотносятся r и Х ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 11:21 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSalekcvpсжимать поток 64-х разрядных чисел с равномерным распределением значенией ... [в случае действительно случайных данных с равномерным распределением] решения [скорее всего] не имеет если нам дан поток "действительно случайных данных с равномерным распределением", то он нам дан в какой-то нотации ("битовой нотации", поскольку в компе есть только биты). Вопрос "удастся ли сжать" имеет смысл только с указанием двух нотаций -- исходной и сжатой. Так почему исходную нотацию нельзя сжать? Потому что нотации вообще все одинаково компактны или потому что исходная всегда самая компактная? Сжатие как процесс - это удаление избыточности из данных. В случайном потоке 64-х битных чисел с равномерным распределением значений избыточности нет по-определению. Соответственно и сжатию без потерь он не поддаётся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 15:58 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
alekcvp, кажется, в вашей формулировке "случайный поток 64-х битных чисел с равномерным распределением значений" -- склеены описание распределения (а именно: равномерно-случайно распределённые целые числа в диапазоне от 0 до 2^64-1 ) и описание нотации (а именно: двоичная запись числа с дополнением слева нолями до полного числа 64 бита). Интересно, как такой нетривиальной конструкции из смежных дисциплин приписывается квалификация "избыточности нет по-определению" ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 16:26 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSИнтересно, как такой нетривиальной конструкции из смежных дисциплин приписывается квалификация "избыточности нет по-определению" ... Ну простой пример: при сжатии текста нам не обязательно хранить все буквы и знаки препинания, из которых он состоит. Ведь в любом тексте есть повторяющие-ся слова или как минимум слоги. Поэтому можно составить словарик этих повторений, отсортировать их по частоте появления и закодировать последовательностями бит разной длины, чем чаще встречается - тем короче последовательность (код Хаффмана). В случае же абсолютно случайной последовательности (любой разрядности) - повторяющихся групп чисел либо не будет вовсе, либо будет минимальное количество минимальной длины, соответственно и сжать таким образом её не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 16:52 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSalekcvp, кажется, в вашей формулировке "случайный поток 64-х битных чисел с равномерным распределением значений" -- склеены описание распределения и описание нотации Читать как "случайный поток чисел в диапазоне от 0 до 2^64 - 1". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 16:53 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
alekcvpВ случае же абсолютно случайной последовательности (любой разрядности) - повторяющихся групп чисел либо не будет вовсе, либо будет минимальное количество минимальной длины, соответственно и сжать таким образом её не получится. -- будут и повторы, и любой, вообще говоря, длины. А сжать не получится потому, что нужно будет сохранить также и словарь, который "сожрёт" весь эффект от сжатия (это перекличка с соседней темой про "генерируемый словарь"). А если был бы "параллельный льготный тариф" для отправки (хранения) словаря, то можно было бы забацать "словарь" из одного слова ( = отправляемый текст). Тогда сам "архив" имел бы длину 1 бит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 17:02 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
alekcvpЧитать как "случайный поток чисел в диапазоне от 0 до 2^64 - 1". тогда ваше утверждение состоит в том, что нотация "двоичная запись чисел с дополнением слева нолями до полного числа 64 бита и выкладыванием этих записей вплотную одна за другой (без префиксов и разделителей, которые не требуются)" -- является наиболее компактной (в том смысле, что никакой более компактной нотации не существует). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 17:26 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSVladimir Baskakov простенькую кодировку для r(n) = A* log B (n) + C. Например берем X лично я не понял, как у вас тут соотносятся r и Х ... Для случая икс=2. 2^x-1 = 3. Кодируем число в троичной системе. Каждый знак кода заменяем 0 на 00 1 на 01 2 на 10 11 - стоп-биты. Длина кода в тоичной системе для числа N - log 3 (N), каждый знак кодируется двумя битами - A=2, стоп-битов тоже два С=2. Икс=3 - два в кубе=8, кодируем в семиричной системе 3 (log 7 (n)) + 3. Умные кодировки, они конечно получше. Намного ли? Вопрос. На практике, я бы этим кодом кодировал длину битовой последовательности числа. а само число оставлял как есть. Ноль 01 11 0 1 01 11 1 2 - 10 11 10 -- на практике от этого польза сбалансирована вредом. Так, на тысячебитное целое В заголовке будет 6*2+2 - 10 бит.... вроде немного, но такие длинные целые малотипичны. Для 64 разрядного - 4*2+2 = 10 бит. Потери больше 10 %... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 17:41 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
alekcvp, а представьте, что задача стоит передавать "случайный поток чисел в диапазоне от 0 до К* 2^64 - 1", где К=0.55 ... тогда "стандартная битовая нотация" очевидно (для меня, по крайней мере) не является самой компактной ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 17:45 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
alekcvpВ случае же абсолютно случайной последовательностиАбсолютно случайно может быть только бесконечная последовательность. В любой конечной, включая подпоследовательность случайно, можно поискать какие-нибудь закономерности. Не факт, что повезёт, но шанс - не нулевой. P.S. Другой вопрос, что: 1. Всё равно глупость: проблема (исходной) технологии не в применимости, а в практичности; 2. 512 (да хоть и 4096) битов - коротковато в любом случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 17:54 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovВ любой конечной, включая подпоследовательность случайно, можно поискать какие-нибудь закономерности. Не факт, что повезёт, но шанс - не нулевой. Найти какие-нибудь отдельные закономерности вы может и найдёте, но накладные расходы на их кодирование съедят весь выигрыш от этой операции ИМХО. Иван FXSalekcvp, а представьте, что задача стоит передавать "случайный поток чисел в диапазоне от 0 до К* 2^64 - 1", где К=0.55 ... тогда "стандартная битовая нотация" очевидно (для меня, по крайней мере) не является самой компактной ... Ну, тут оптимальнее будет разве что запись с дробным количеством бит на число, и то не факт. Мне лень считать, если честно :) Во всех остальных случаях ИМХО всё равно 64-х битная запись будет оптимальнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 18:47 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Кому как, но лично мне достаточно очевидно, что любой алгоритм сжатия (с потерями или без) создаёт детерминированную последовательность. Да, не произведя сжатия, результат мы не знаем, но повторные сжатия выдадут тот же самый результат. Что изменится, если одним и тем же алгоритмом (схема сжатия плюс параметры конкретного режима) одни и те же данные обработает миллион участников? Ничего. Сколько участников не просто готовы, а реально могут изобрести новый алгоритм сжатия, адаптированный под конкретную последовательность? А повторять этот подвиг ежесекундно? Если быть реалистом - строгий ноль. Что, собственно, и делает бессмысленной исходную затею. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 19:28 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, адаптировать алгоритм сжатия под конкретную последовательность (подбирая в нём значение некоторого параметра) -- это всё-таки совершенно не называется "изобрести новый алгоритм сжатия" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 20:53 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSадаптировать алгоритм сжатия под конкретную последовательность (подбирая в нём значение некоторого параметра) -- это всё-таки совершенно не называется "изобрести новый алгоритм сжатия"За неимением вашего алгоритма, я могу сослаться на существующие и вполне обоснованно утверждать, что разные режимы одного алгоритма дают разницу на проценты для больших объёмов хорошо сжимаемых данных. А вы предлагаете манипулировать сотнями-тысячами бит потенциально плохо сжимаемых данных - параметру тупо не хватит материала для набора статистики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 21:46 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSalekcvpВ случае же абсолютно случайной последовательности (любой разрядности) - повторяющихся групп чисел либо не будет вовсе, либо будет минимальное количество минимальной длины, соответственно и сжать таким образом её не получится. -- будут и повторы, и любой, вообще говоря, длины. А сжать не получится потому, что нужно будет сохранить также и словарь, который "сожрёт" весь эффект от сжатия (это перекличка с соседней темой про "генерируемый словарь"). А если был бы "параллельный льготный тариф" для отправки (хранения) словаря, то можно было бы забацать "словарь" из одного слова ( = отправляемый текст). Тогда сам "архив" имел бы длину 1 бит. Я изначально предложил подойти ad-absurdum и заменить случайную последовательсность справочника на sequence но меня не услышали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 21:51 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovЗа неимением вашего алгоритма, я могу сослаться на существующие и вполне обоснованно утверждать, что разные режимы одного алгоритма дают разницу на проценты для больших объёмов хорошо сжимаемых данных.испытываю большие трудности в понимании написанного 1. "За неимением вашего алгоритма ... вы предлагаете манипулировать сотнями-тысячами бит потенциально плохо сжимаемых данных" -- это про какую из инициированных мной в этом году тем? (Да виноват, инициировал несколько, прорвало.) 2. "дают разницу на проценты" -- а разве разные архиваторы конкурируют друг с другом не "за проценты" (в смысле единицы процентов)? Ну не в десятки же раз "хороший архиватор" сжимает лучше, чем "плохой архиватор"! 3. "разные режимы одного алгоритма" -- вы понимаете разницу между выбором seed в каком-нибудь параметризованном алгоритме (типа градиентного спуска) и выбором, например, количества слоёв в нейронной сети? Хотя и то, и другое можно назвать "выбором значения параметра" ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 22:47 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Иван FXSиспытываю большие трудности в понимании написанногоОбычно, помогает не сразу вывалить идею на публику, а подумать над ней, что-нибудь сделать или, хотя бы, просто отложить, а спустя некоторое время подумать ещё раз. Насколько я понял, вам кажется странным тратить усилия на майнинг хэшей и вы предлагаете майнить степени сжатия. Лично для меня бессмысленны оба занятия, но ваш вариант - ещё менее осмысленный: для майнинга хэшей есть чёткий алгоритм и побеждать будет тот, у кого больше вычислительных мощностей при равной архитектуре. Включая архитектуру, специально разработанную под конкретную задачу. Чтобы майнить степени сжатия требуется или каждый раз разрабатывать алгоритм сжатия под конкретную последовательность, что выглядит несколько утопично или подбирать некий мифический параметр. Это не только выглядит совершенной маниловщиной, но и является ею по сути. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 23:06 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Все 4 страницы срача я не читал, поэтому сразу предложу хорошее решение. Звиняйте, если оно уже было. Число записывается в формате <длина числа в битах><само число> Длина числа в битах записывается в виде набора байт, где у каждого байта старший бит - признак конца, а 7 младших - данные. т.е. <0xxxxxxx>, <0xxxxxxx>, <1xxxxxxx> для чисел до 2^21 или <1xxxxxxx> для чисел до 127 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 09:33 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovНасколько я понял, вам кажется странным тратить усилия на майнинг хэшей и вы предлагаете майнить степени сжатия. это в другую тему реплика, давайте не перемешивать темы. Ответил там: 21106660 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 10:44 |
|
||
|
Компактная нотация бинарной записи числа
|
|||
|---|---|---|---|
|
#18+
Подумал, и понял что у Левенштейна - хороший код. плотнее пожалуй не загонишь. для совсем частных случаев можно попробовать, а в целом - вряд ли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 12:55 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1340186]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
171ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
93ms |
get tp. blocked users: |
2ms |
| others: | 328ms |
| total: | 639ms |

| 0 / 0 |
