2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Как преобразовать число в более короткое
Сообщение09.11.2005, 13:20 
Добрый день! Возникла задача:
есть число в шестнадцатиричной системе счисления вида 1234567842cd18b576a0000000000427, необходимо с помощью какого-нибудь алгоритма его преобразовать, с целью уменьшения размерности (преобразование должно быть обратимо, т.е. должна быть возможность восстановления оригинала, на основании преобразованного значения). Также необходимо отметить, что исключения букв из числа ведет к уменьшению его размерности (т.к. в последующим оно будет также кодироваться).

Единственное что я придумал, так это перевод этого числа в десятичную систему счисления, для указанного выше примера получим: 24197857176051669629762955405363774503 - хоть кол-во символов в представлении числа и увеличилось, но за счет того, что исчезли буквы, последующее его кодирование уменьшает длину кода.

Господа математики, подскажите пожалуйста можно как либо еще преобразовать эти числа с целью уменьшени их размерности (желательно, чтобы букв не осталось)?

  
                  
 
 
Сообщение09.11.2005, 18:10 
Экс-модератор


12/06/05
1595
MSU
Можно попробовать переводить сразу в двоичную систему, резать на блоки по 8 бит и кодировать несколькими байтами.

 Профиль  
                  
 
 а зачем?
Сообщение09.11.2005, 18:21 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Не очень понятен смысл - зачем все это нужно. Почему 10 цифр - подходит, а 16 цифр - нет? В чем принципиальная разница?

 Профиль  
                  
 
 
Сообщение09.11.2005, 18:54 
Если перевести в 2-оичный вид, а потом кодировать по байтно, то получиться 16 байт, т.е. 16 символов в кодировке ASCII. А мне желательно избежать букв, а уж темболее различных символов

  
                  
 
 
Сообщение09.11.2005, 18:57 
Просто полученная информация кодируется штрих кодом в формате Code 128. Желательно сделать его длину как можно меньшей

  
                  
 
 
Сообщение09.11.2005, 19:03 
А этот код обладает таким свойством, что для того, чтобы закодировать строку символов вида:
1234567842cd18b576a0000000000427 - длинною 32 символа, минимальная длина кода, должна быть порядка 70 миллиметров. А вот если кодировать строку:
24197857176051669629762955405363774503 - 38 символов, можно обойтись длиной кода всего 50 миллиметров. Но тоже многова-то. Хотелось бы еще уменьшить его длину.

  
                  
 
 Re: Как преобразовать число в более короткое
Сообщение09.11.2005, 20:06 
___Олег___ писал(а):
Добрый день! Возникла задача:
есть число в шестнадцатиричной системе счисления вида 1234567842cd18b576a0000000000427, необходимо с помощью какого-нибудь алгоритма его преобразовать, с целью уменьшения размерности (преобразование должно быть обратимо, т.е. должна быть возможность восстановления оригинала, на основании преобразованного значения). Также необходимо отметить, что исключения букв из числа ведет к уменьшению его размерности (т.к. в последующим оно будет также кодироваться).

Единственное что я придумал, так это перевод этого числа в десятичную систему счисления, для указанного выше примера получим: 24197857176051669629762955405363774503 - хоть кол-во символов в представлении числа и увеличилось, но за счет того, что исчезли буквы, последующее его кодирование уменьшает длину кода.

Господа математики, подскажите пожалуйста можно как либо еще преобразовать эти числа с целью уменьшени их размерности (желательно, чтобы букв не осталось)?



pridumalochenj prostoi algoritm
smqsl v sledujushem razbivaem chislo po dve chifrq s pravo na levo
24 19 78 57 17 60 51 66 96 29 55 40 53 63 77 45 03
nahodim summq par i poluchaem novoe chislo
6 10 15 12 8 6 6 12 15 11 10 4 8 9 14 9 3
6101512866121511104891493
prodelqvaem tu zhe operatsiju do tex por poka ne poluchim odnoznachnoe chislo
6 10 15 12 86 61 21 51 11 04 89 14 93
6163147362417512
61 63 14 73 62 41 75 12
7951085123
79 51 08 51 23
166865
16 68 65
71411
7 14 11
7 5 2
7 7
14
5
v itoge mozno poluchitj dva chisla kotorqe obrazujut storonq treugoljnika(poprobuite reshitj na bumage i togda uvidite) odno 2667177715 i drugoe takoi zhe dlinq 3323512745
obratnoe znachenie nahoditsja putem raznosti
a esli nado eshe raz umenjshitj dlinnu chisla to mozhno prodelatj tu zhe operatsiju uzhe s poluchivshimsja chislom
esli voprosq to algoritmu to pishite usualis@hotmail.com
chem smogu pomogu

  
                  
 
 
Сообщение09.11.2005, 20:10 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:

Ничтожный осмелится заметить, что это вопрос из Computer Science. Там люди более осведомленные в вопросах представления и кодирования информации. И посоветовать больше смогут.

Если я правильно Вас понимаю, Вы пользуетесь Code-128, Charset C для кодирования цифр. Он действительно весьма плотен. Вы можете попробовать Charset B, предварительно упаковав двоичное число чем нибудь типа Base-85 (результат для 32-hex будет ASCII строка длинной 20, аккурат в Charser B). Будет ли это короче в Code-128, Вам виднее, но это, пожалуй, все, что можно сделать для представления прозвольного числа.

 Профиль  
                  
 
 Re: Как преобразовать число в более короткое
Сообщение09.11.2005, 20:13 
da zabql skazatj
poluchaem dva chisla no dlja rekodirovki dostatochno odnogo :)

  
                  
 
 вопрос по коду-128
Сообщение09.11.2005, 20:18 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Прочитал описание кода и не до конца понял, сколько значений может принимать каждый информационный знак (без учета заголовка и окончания, которые все равно есть всегда). Также нужно знать, какой длины шестнадцатиричные строки нужно кодировать. Всегда 32 символа или произвольной длины? Есть ли какие-то закономерности в числах или они могут быть совершенно произвольными?

 Профиль  
                  
 
 Re: Как преобразовать число в более короткое
Сообщение09.11.2005, 20:27 
proshu proshenija no eto opjatj ja
etot algoritm mozhno ispoljzovatj ne toljko dla chifr no i slov no predvoriteljno nado vse perevesti v dvoichnqi kod a daljshe vse po sheme

  
                  
 
 
Сообщение09.11.2005, 20:42 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
2 mathfan:

непонятно, как восстанавливать число обратно. Как понять, например (беру первый шаг), что из последовательности

6 10 15 12 8 6 6 12 15 11 10 4 8 9 14 9 3

нужно получить именно

24 19 78 57 17 60 51 66 96 29 55 40 53 63 77 45 03,

а не

24 19 78 57 17 60 51 66 96 29 28 40 53 63 77 45 03?

 Профиль  
                  
 
 
Сообщение09.11.2005, 20:44 
незванный гость писал(а):
:evil:

Ничтожный осмелится заметить, что это вопрос из Computer Science. Там люди более осведомленные в вопросах представления и кодирования информации. И посоветовать больше смогут.

Если я правильно Вас понимаю, Вы пользуетесь Code-128, Charset C для кодирования цифр. Он действительно весьма плотен. Вы можете попробовать Charset B, предварительно упаковав двоичное число чем нибудь типа Base-85 (результат для 32-hex будет ASCII строка длинной 20, аккурат в Charser B). Будет ли это короче в Code-128, Вам виднее, но это, пожалуй, все, что можно сделать для представления прозвольного числа.


Да действительно, я в начале тоже подумал написать туда, но т.к. сам программист, уже попробовал много всяких способов, но кординально уменьшить длину кода не удалось, вот я и решил обратиться к математикам, в надежде найти какое-нибудь красивое решение этой задаче. Если вы заметили, в первом посте я даже не написал о том что буду делать с числам (дописал уже потом, т.к. люди спрашивали).
Да вы правильно поняли используется Code-128. А вот упаковать Base-85 я попробую, спасибо.

  
                  
 
 Re: Как преобразовать число в более короткое
Сообщение09.11.2005, 20:44 
mathfan писал(а):
da zabql skazatj
poluchaem dva chisla no dlja rekodirovki dostatochno odnogo :)


не понятен алгоритм, поясните пожалуйста

  
                  
 
 Re: вопрос по коду-128
Сообщение09.11.2005, 20:54 
PAV писал(а):
Прочитал описание кода и не до конца понял, сколько значений может принимать каждый информационный знак (без учета заголовка и окончания, которые все равно есть всегда). Также нужно знать, какой длины шестнадцатиричные строки нужно кодировать. Всегда 32 символа или произвольной длины? Есть ли какие-то закономерности в числах или они могут быть совершенно произвольными?


Шестнадцатитричные строки всегда длиною 32 символа. Закономерности в числах есть - они все уникальные, короче GUID :)

  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group