Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26149
Рейтинг: 2127
#1: 2011-03-04 13:57:10 ЛС | профиль | цитата
Вы, наверное, сталкивались со случаями, когда вставляешь сильно царапанный диск, а привод его читает. Так вот, это не что иное, как восстановление блоков информации при помощи знаменитых кодов Рида-Сломона. Достигается это небольшой избыточностью информации, записанной на диск в довескок к данным, и эта избыточная информаци, есть не что иное, как контрольные суммы вашей информации. По этому же смому принципу построены все жесткие диски и все Raid массивы. Все они используют коррекцию данных кодами Рида-Соломона. Вся представленная в нэте инфа по программным кодам, основана на С. Я постарался восполнить этот пробел и переделал код С на Delphi. Этого кода на Delphi вы не найдете нигде, его просто нет.
Представлю прототип кодера/декодера кодов Рида-Соломона на IC, может пощупать всю прелесть его работы. Представленный кодер использует коды РС следующей схемы -- 255, 231, 12, где 255 -- общая длина блока, 231 -- длина ваших данных, 12 -- количество байтовых ошибок (не битовых, а именно байтовых)

hiasm_rs_encode_decode_full.sha
карма: 22

0
файлы: 1hiasm_rs_encode_decode_full.sha [20.6KB] [386]
Ответов: 1321
Рейтинг: 37
#2: 2011-03-04 14:04:47 ЛС | профиль | цитата
Не все данные восстанавливает, но всё-же восстанавливает ,например 132432 число не восстанавливает
карма: 0

0
Ответов: 8926
Рейтинг: 823
#3: 2011-03-04 14:23:38 ЛС | профиль | цитата
nesco, молодец!
Восстанавливает при изменении порядка следования и символов, при одновременном изменении количества принятых символов -- не доставляет справа столько же символов, а изменение количества (ну не прочёлся один, или два) тоже распространённая ошибка.
карма: 19

0
Разработчик
Ответов: 26149
Рейтинг: 2127
#4: 2011-03-04 14:27:11 ЛС | профиль | цитата
Я же написал, что это -- прототип. Не вся концепци упихивания и восстановления блоков меньшей длины проработана
Roma писал(а):
например 132432 число не восстанавливает

конкретнее можно, интересует последовательность действий
Да, действительно, количество символов меньше 12, вот потому и не восстанавливает, это ошибка не кодера, а схемы
карма: 22

0
Ответов: 1321
Рейтинг: 37
#5: 2011-03-04 14:28:33 ЛС | профиль | цитата
nesco, писал(а):
конкретнее можно, интересует последовательность действий

Говори

карма: 0

0
Разработчик
Ответов: 26149
Рейтинг: 2127
#6: 2011-03-04 14:30:10 ЛС | профиль | цитата
Roma писал(а):
Говори

Я тебя хотел спросить, но догадался сам
карма: 22

0
Разработчик
Ответов: 4698
Рейтинг: 426
#7: 2011-03-04 14:30:46 ЛС | профиль | цитата
Roma писал(а):
Говори

Это тебя спросили
nesco, подтверждаю, вводим 132432 в Исходная строка, жмем Encrypt, потом Decrypt, "коррекция невозможна"
------------ Дoбавленo в 14.30:
nesco опередил
карма: 10
0
Ответов: 1321
Рейтинг: 37
#8: 2011-03-04 14:34:44 ЛС | профиль | цитата
[flood]Запутался [/flood]
карма: 0

0
Ответов: 3349
Рейтинг: 233
#9: 2011-03-04 14:35:29 ЛС | профиль | цитата
nesco, А как это может помочь, когда исходная строка неизвестна?
карма: 1

0
Ответов: 8926
Рейтинг: 823
#10: 2011-03-04 14:48:45 ЛС | профиль | цитата
Iva-a-ann, она и неизвестна
карма: 19

0
Разработчик
Ответов: 26149
Рейтинг: 2127
#11: 2011-03-04 14:51:58 ЛС | профиль | цитата
Ivann писал(а):
когда исходная строка неизвестна?

Ты че, сбрендил
Ну причем здесь исходная строка, и как она может быть неизвестна
На этапе приема/передачи данных происходит порча информации, код ее пытается восстановить
------------ Дoбавленo в 14.51:
Assasin писал(а):
подтверждаю, вводим 132432 в Исходная строка, жмем Encrypt, потом Decrypt, "коррекция невозможна"

Бывают случаи, когда код не может решить уравнения и не находит его корни
карма: 22

0
Ответов: 1321
Рейтинг: 37
#12: 2011-03-04 14:52:05 ЛС | профиль | цитата
Я немогу понять принцип работы программы, как восстанавливаются данные?
карма: 0

0
Разработчик
Ответов: 26149
Рейтинг: 2127
#13: 2011-03-04 14:53:40 ЛС | профиль | цитата
Roma писал(а):
Я немогу понять принцип работы программы, как восстанавливаются данные?

Молча На основе высшей булевой алгебры и полей Галуа конечной разрядности
карма: 22

0
Ответов: 3349
Рейтинг: 233
#14: 2011-03-04 14:53:59 ЛС | профиль | цитата
nesco писал(а):
Ну причем здесь исходная строка, и как она может быть неизвестна

Все, понял
карма: 1

0
Разработчик
Ответов: 4698
Рейтинг: 426
#15: 2011-03-04 15:07:11 ЛС | профиль | цитата
nesco, да ведь на основе этого кода можно делать архиватор, передаем первыми двумя байтами первые два байта исходной строки, потом в 4 следующих длину исходной строки, приемщик дополняет всю строку до нужной длинны пробелами и расшифровывает Пример: 123456789ABC, (crypted: ) 12[00 00 00 0C] (лень переводить в символы по HEX коду), прога=приемщик дополняет: "12[пппппппппп]" и вуаля, данные тут! В два раза меньше исходных
Вопрос только в том, всегда ли сможет код решить систему уравнений Научи его комплексным числам
------------ Дoбавленo в 15.06:
Хехехе, что-то я совсем, на сам код Рида тоже надо байты
карма: 10
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)