![]() |
|
|
![]()
|
|
| DeviceIK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 3.12.2006 Репутация: нет Всего: нет |
Исследую файл в битовом виде. Ищу совпадение комбинаций внутри потока. Размер блока для исследования - от 2 до 4096. Т.е. например, 100 бит. Если первые 100 бит и 5е 100 бит совпадают, то увеличиваю счетчик для такой комбинации.
Задача отобразить на графике все комбинации для блока данной длины. Т.е. и встречающиеся, и все отсутствующие. Т.е. если блок 2 бита, комбинация 01 встречается 3 раза и все, то на графике: 00 - 0, 01 - 3, 10 - 0, 11 - 0. Вопрос: как сделать то же самое для блока 4096? Поскольку комбинаций 2^4096, то обрабатывать все это довольно долго. Может по частям или еще как-нибудь. При этом при выводе еще надо проверять было ли совпадение такой комбинации в файле, чтобы на оси "У" отобразилось нужное значение. |
|||
|
||||
| VOS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 31.1.2007 Репутация: нет Всего: 8 |
Интересная задача.
Можно попробовать сделать union, а в нем соответственно unsigned char mas_char [512]; unsigned int mas_int [128]; unsigned short mas_short [256]; потом скопировать туда исходную последовательность, в другой проверяемую. затем, если размер сверяемой последовательности >8, то сравнивать src.mas_char[0] и dst.mas_char[0] если >16, то mas_short, если >32 то mas_int. Тогда в основном будет использоваться не побитовое сравнение, а аппаратно сразу байт, слово и т.д. Этим сразу будут отсекаться большое кол-во последовательностей. Ну а если совпало, а размеры последовательностей не кратны 8, то остальное сравнивать сдвигами. Т.е. например размер 106 бит, тогда можно сравнивать как mas_int[0],mas_int[1], mas_int[2] - это 96 байт, + mas_char[12] уже всего сравнили 104 бита и останется сдвигами только 2 бита сравнить. Немного сумбурно, но может поможет Это сообщение отредактировал(а) VOS - 6.12.2007, 14:48 |
|||
|
||||
| DeviceIK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 3.12.2006 Репутация: нет Всего: нет |
Основную задачу я уже решил - статистику блоков ищу и отображаю на графике нормально. Препод сказал отобразить там же все оставшиеся комбинации для данной последовательности. Т.е. взять перебор от 0000000, 0000001, 00000010, ... 11111111. Которых нет в файле, то 0 на ординат, которые есть - то сколько насчитал. Вопрос в том как все перебрать, если длина блока 4096!
|
|||
|
||||
| VOS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 31.1.2007 Репутация: нет Всего: 8 |
Ну как. Считать только те, которые есть
Если тупо - берешь первые 4096 бит (512 байт) находишь вхождения, сдвигаешь на бит следующие 512 и т.д. Соответственно всех остальных - нет |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
По поводу перебора от 0 до 1111... для 4096 бит: Число вариантов 2**4096 ~ 10**1227 Если каждый вариант перебирается за 1 ns (10**-9 или 1G вариантов в сек), то на перебор всего уйдет ~ 10**1219 сек. Возраст солнечной системы ~1.8*10**17 сек. Делайте выводы |
|||
|
||||
| AntonChik |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 4.10.2005 Где: Красноярск Репутация: 1 Всего: 1 |
думаю, задача не в практическом применении, а в "чисто теоретическом" написании алгоритма и в доказательстве того, что он способен доработать до конца без косяков)
да и в конечном счете полный перебор в 4096 бит производить не только бесполезно(в плене ресурсов времени), но и глупо, т.к. явно задача задана на логическое мышление... и VOS как раз привел вполне разумное начало к действиям) Это сообщение отредактировал(а) AntonChik - 7.12.2007, 15:33 --------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |