2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Как свернуть 3 числа в одно
Сообщение15.06.2006, 13:33 
Есть 3 числа с граничными значениями:
a1 - 4095
a2 - 255
a3 - 127
Задача свернуть их в одно число с возможностью разложить обратно.
Чтобы свернуть делаю так:
(a1*4096)+(a2*256)+(a3*128)=X

Как теперь вынуть их обратно - чего-то не получается?
a1 = mod(X/4096)
a2 = целое(остаток(X/4096)/256)
и тд

Что я не так делаю?

 
 
 
 
Сообщение15.06.2006, 14:11 
Аватара пользователя
А как у Вас a1, a2 и a3 ограничены снизу?

 
 
 
 
Сообщение15.06.2006, 15:03 
от нуля

 
 
 
 
Сообщение15.06.2006, 15:16 
Аватара пользователя
Тогда не будет работать, хотя бы потому, например, что $255\cdot256>1\cdot4095$
Я бы делал так: перешел в двоичную систему и записал число из 27 знаков: первые 12 - это a1, затем 8 - а2 и еще 7 - а3.
То есть получится, что Ваше число должно кодироваться как
$a1\cdot 2^{7+8}+a2\cdot 2^7+a3=32768a1+128a2+a3$

 
 
 
 
Сообщение16.06.2006, 06:54 
Сообщение удалено автором.
(мог бы полностью удалить - удалил бы полностью, чтоб глаза не мозолило)

 
 
 
 
Сообщение16.06.2006, 07:13 
Аватара пользователя
:evil:
"""Что происходит с нами, // Когда мы видим сны""" (Б.Ш.Окуджава)

$X = a_1 + 4096(a_2+256 a_3)$. Итого $12+8+7 = 27$ бит.
Тогда $a_1 = X \!\!\mod 4096$, $a_2 = [\frac{X }{4096}] \!\!\mod 256$, и $a_3 = [\frac{X}{4096 \times 256}]$. ([] -- целая часть.)

 
 
 
 Re: Как свернуть 3 числа в одно
Сообщение16.06.2006, 07:42 
kosm писал(а):
Есть 3 числа с граничными значениями:
a1 - 4095
a2 - 255
a3 - 127
Задача свернуть их в одно число с возможностью разложить обратно.


А так Вам не подойдет:

$T=a1*10^6+a2*10^3+a3$
$a1= \text{целое}(T/10^6)$
$a2=\text{целое}((T-a1*10^6)/10^3)$
$a3=T-a1*10^6-a2*10^3$

 
 
 
 
Сообщение16.06.2006, 07:53 
Аватара пользователя
:evil:
Так менее компактно... (в смысле, что диапазон свертки не минимален)

 
 
 
 
Сообщение16.06.2006, 10:16 
незванный гость писал(а):
диапазон свертки не минимален


Так, вроде, и не просили минимальный.

 
 
 
 
Сообщение16.06.2006, 10:20 
Аватара пользователя
Елена К, конечно, Вы правы, но указанные диапазоны: $[0,127=2^7-1]$, $[0,255=2^8-1]$ и $[0,4095=2^{12}-1]$ так и просят двоичной системы

 
 
 
 
Сообщение16.06.2006, 11:54 
Ребят, всем спасибо за предложеные варианты!
Диаппазоны действительно были из расчета двоичной системы :)

 
 
 
 
Сообщение16.06.2006, 15:27 
photon писал(а):
Елена К так и просят двоичной системы


С этим я согласна. И вообще, как выясняется, не права. Так что сорри за мусор в теме.

 
 
 
 
Сообщение16.06.2006, 16:38 
Аватара пользователя
Елена К писал(а):
С этим я согласна. И вообще, как выясняется, не права. Так что сорри за мусор в теме.

А что тут извиняться? Я вот глянул и поочерёдно меня посетили следующие мысли:
1) $2^{a_1}3^{a_2}5^{a_3}$
2) Нет, пожалуй, многовато будет. :D
3) Не мудря написать числа подряд в десятичной записи, добавив если нужно нули, т.е. в точности как у Вас.
4) Сделать то же самое, но в двоичной системе - ясно, что экономнее будет.
Пока всё это проносилось - вижу, что 4) уже есть, а до того, что диапазоны такие, что это самая компактная из всех возможных для данных диапазонов я даже и подумать не успел - хотя это и прёт в глаза, заметил после того, как photon пальцем показал. :D

Пусть (для начала всего два) целые неотрицательные $a_1, a_2$ удовлетворяют неравенству $a_1+a_2< N
Сколько битов будет достаточно, чтобы свернуть их в одно с возможностью развернуть?
Ясно, что хватит $2[\log_2 N] + 1$, то есть экономится 1 бит в сравнении с самым очевидным. Можно ли сэкономить больше?

 
 
 
 
Сообщение16.06.2006, 16:43 
Аватара пользователя
О-о-п-с! Кажется прокосячил - один бит можно сэкономить для 4-х чисел.
ЗЫ. Не бейте сильно, если это совсем тривиально, я ведь глубоко не задумывался.

 
 
 
 
Сообщение16.06.2006, 23:21 
bot писал(а):
...1) $2^{a_1}3^{a_2}5^{a_3}$
2) Нет, пожалуй, многовато будет. :D

В самый раз для "Математики шутят". :)

 
 
 [ Сообщений: 19 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group