LINUX.ORG.RU

Попытка создания модели памяти.

 


0

1

Нужно сжать (сократить) случайный двоичный массив, с возможностью восстановления (без потерь). Например, 1110011010011101111000010010110110110000011011000000110101111110

https://yandex.ru/collections/card/5de95e25c8ba0556461d6c04/

Спасибо ВСЕМ. Но поражает факт, что

15^128 = 3464823841570940521841251787633899107341763939005956081649855025164014124153383005393700309333434209191671757175379231806194392189052899091182801387520

Значит, есть и обратный маршрут… Может, не такой уж короткий…

alex00 ()

Не, ты конечно можешь представить свой массив как

(a1*a2*a3...)+c

И раскладывать на простые множители, по какому-нибудь алгоритму. Или даже логарифмировать. Но это путь не быстрый, не эффективный.

anonymous ()
Ответ на: комментарий от alex00

есть и обратный маршрут

>>> bin(3464823841570940521841251787633899107341763939005956081649855025164014124153383005393700309333434209191671757175379231806194392189052899091182801387520)
'0b100001110111110001010011100000100010101101110100101110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
>>> 

i-rinat ★★★★★ ()

еще китайская теорема об остатках на ум приходит. Берем 2,3,4 (сколько надо) взаимнопростых числа побольше, дробим исходное и делим, вместо одного большого записываем два маленьких. еще можно перевести исходное в аски и применить алгоритм Хаффмана, но там проблема как передать таблицу кодирования.

Silerus ★★★ ()

не обязательно, через вычисления. пока не пробовал Вариант: поиск и удаление с записью смещения(адреса) стандартных наборов: 010, 0110, 01110, 01110 и их инверсию

alex00 ()
Ответ на: комментарий от KivApple

Ищем 010,0110,01110,011110 и инверсии, одновременно и запишем тот который ближе к нулю. запишем и удалим. это может быть любая длина. к примеру, на 1024 бита,одна запись смещения - не более 10 бит.

alex00 ()
Ответ на: комментарий от alex00

еще вариант. левую и правую части как соединять так и НЕ соединять. понадобится еще один флаг. только сложно для понимания становится. будет не один ,а два массива

alex00 ()
Ответ на: комментарий от alex00

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

alex00 ()

Еще можно чередовать, все с флагом, удаление стандартных наборов( о них- выше), с наложением шаблонов и их инверсий( слева направо и наоборот): 01 0011 000111 00001111 и т.д. 00…0011…11. Затем поиск и запись первого НЕсовпадения. запись первого бита и длины шаблона. удаление совпадений.

alex00 ()
Ответ на: комментарий от Legioner

Все данные случайны (в общем случае). Другое дело, что у ТС очень короткий массив. Общеизвестные алгоритмы работают за счёт «коллизий случайных данных». Даже, если его массив возможно сжать выигрыш будет настолько незначительный, что «игра не стоит свеч». Сжатие уместно для больших массивов данных. Ему проще «придумать генератор случайных(?) массивов» :)

anonymous ()
Ответ на: комментарий от anonymous

15^128 = 3464823841570940521841251787633899107341763939005956081649855025164014124153383005393700309333434209191671757175379231806194392189052899091182801387520

Расчет на то ,что если удастся сократить массив процентов на 10-20, то можно повторно сократить то , что получилось после сокращения первого, фактического, в который можно писать и из него читать.

alex00 ()
Ответ на: комментарий от alex00

оно конечно ботно.

по теме

утя равномощьны области сжатия и область сжатого

т.е если сохранять взаимно-однозначное соответствие то очевидно найдётся такой вход на котором твоё сжатие выдаст более длинное чем входное - эт так доказывается отсутствие универсального сжимателя.

anonymous ()

Первая вариация данного процессора под названием MuP21, имеет вычислительную способность 100 MIPS, при техпроцессе 1.2 мкм (!), энергопотребление 50 мВт. Работает процессор на 100 мГц и количество транзисторов равно 7000 штук (!).

Впечатляет. У Pentium 1 (60 МГц) с 3.1 млн. транзисторов, 0,8 мкм и до 15 ватт энергопотреблением, вычислительные возможности были примерно на том же уровне.

http://www.xtechx.ru/c40-visokotehnologichni-spravochnik-hitech-book/misc-processor/

alex00 ()