2014 dxdy logo

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

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


Правила форума


В этом разделе нельзя создавать новые темы.



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Как свернуть 3 числа в одно
Сообщение15.06.2006, 13:33 


15/06/06
3
Есть 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 
Экс-модератор
Аватара пользователя


23/12/05
12063
А как у Вас a1, a2 и a3 ограничены снизу?

 Профиль  
                  
 
 
Сообщение15.06.2006, 15:03 


15/06/06
3
от нуля

 Профиль  
                  
 
 
Сообщение15.06.2006, 15:16 
Экс-модератор
Аватара пользователя


23/12/05
12063
Тогда не будет работать, хотя бы потому, например, что $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/01/06
38
Сообщение удалено автором.
(мог бы полностью удалить - удалил бы полностью, чтоб глаза не мозолило)

 Профиль  
                  
 
 
Сообщение16.06.2006, 07:13 
Заслуженный участник
Аватара пользователя


17/10/05
3709
: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 


03/03/06
48
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 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Так менее компактно... (в смысле, что диапазон свертки не минимален)

 Профиль  
                  
 
 
Сообщение16.06.2006, 10:16 


03/03/06
48
незванный гость писал(а):
диапазон свертки не минимален


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

 Профиль  
                  
 
 
Сообщение16.06.2006, 10:20 
Экс-модератор
Аватара пользователя


23/12/05
12063
Елена К, конечно, Вы правы, но указанные диапазоны: $[0,127=2^7-1]$, $[0,255=2^8-1]$ и $[0,4095=2^{12}-1]$ так и просят двоичной системы

 Профиль  
                  
 
 
Сообщение16.06.2006, 11:54 


15/06/06
3
Ребят, всем спасибо за предложеные варианты!
Диаппазоны действительно были из расчета двоичной системы :)

 Профиль  
                  
 
 
Сообщение16.06.2006, 15:27 


03/03/06
48
photon писал(а):
Елена К так и просят двоичной системы


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

 Профиль  
                  
 
 
Сообщение16.06.2006, 16:38 
Заслуженный участник
Аватара пользователя


21/12/05
5931
Новосибирск
Елена К писал(а):
С этим я согласна. И вообще, как выясняется, не права. Так что сорри за мусор в теме.

А что тут извиняться? Я вот глянул и поочерёдно меня посетили следующие мысли:
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 
Заслуженный участник
Аватара пользователя


21/12/05
5931
Новосибирск
О-о-п-с! Кажется прокосячил - один бит можно сэкономить для 4-х чисел.
ЗЫ. Не бейте сильно, если это совсем тривиально, я ведь глубоко не задумывался.

 Профиль  
                  
 
 
Сообщение16.06.2006, 23:21 
Заслуженный участник


15/05/05
3445
USA
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