![]() |
|
![]() ![]() ![]() |
|
Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: нет Всего: 18 |
Люди?!! Есть, естественно, проблема - дан массив из n элементов от 0 до n. Нужно превратить это все
в что-то по короче - то, что можно записать вручную, ну на бумаге хотябы. И из этой записи потом все восстановить - теже числа и на томже месте, если это реально? P.S. Массив - бывший упорядоченный, в котором в каждой ячейке жранился его номер, а потом все перемесили, но без утрат - это так, может поможет. |
|||
|
||||
maxim1000 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
ну сохранять напрямую весь массив, действительно, избыточно
если это делать, нужно записать одно из n^n чисел всего же различных комбинаций - n!, что намного меньше таким образом, нужно просто перевести сведения о порядке элементов в одно число сделать это можно, например, так:
класс CSomeArray - придуман для наглядности алгоритма методы: Length() - возвращает длину массива Find(x) - ищет элемент x в массиве и возвращает его индекс Cut(i) - вырезает элемент с индексом i (длина приэтом уменьшается на 1) Insert(x,i) - вставляет элемент x в позицию с номером i (все, что после него - сдвигается) на самом деле здесь реализован просто перевод числа в другую систему счисления особенностью является переменное основание этой системы: для младшего разряда оно=1 для старшего - n число записывается так: 0*1+i1*1*2+i2*1*2*3+i3*1*2*3*4+... i1 - положение 1 в массиве, который получится после выкидывания всех чисел кроме 0 и 1 i2 - положение 2 в массиве из 0,1,2 ... декодировать можно так:
может, что-нибудь и напутал, но, надеюсь, алгоритм понятен -------------------- qqq |
||||
|
|||||
acp |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 4.2.2003 Где: Владимир Репутация: нет Всего: 2 |
Не понимаю. Массив был такой [1, 2, 3, ..., n]? Известна может быть последовательность перемешивания? Если да, то можно её записывать. Если нет, то её можно попробовать отыскать. Можно попробовать какие-нибудь методы сжатия простейшие
Прикольно придумано ![]() Ещё здесь можно использовать не только "циферное" представление числа, но и "символьное". Т.е. использовать буквы латинского алфавита. |
||||
|
|||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
результатом работы вышеописанного алгоритма является число а его можно выводить уже в системе счисления любого постоянного основания действительно, можно за основание взять, например, 36 (цифры+латинские буквы) или 62(+большие) Это сообщение отредактировал(а) maxim1000 - 21.1.2004, 11:09 -------------------- qqq |
|||
|
||||
Fixin |
|
||||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: нет Всего: 18 |
Нет, замесь производится рандомом.
function(CSomeArray array) - это что, или я не все догоняю, мне-то далеко до толковых прог-мистов. Это сообщение отредактировал(а) Fixin - 21.1.2004, 20:23 |
||||
|
|||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
это - ничего страшного, это - моя ошибка ![]() просто я сначала писал только функцию кодирования и, чтоб долго не думать, обозвал ее function потом я вспомнил, что неплохо было бы ее и раскодировать ![]() -------------------- qqq |
|||
|
||||
Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: нет Всего: 18 |
Точно! надо было подумать!
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |