Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с большим потоком бит, 4096 бит перебор всех комбинаций 
:(
    Опции темы
DeviceIK
Дата 6.12.2007, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.12.2006

Репутация: нет
Всего: нет



Исследую файл в битовом виде. Ищу совпадение комбинаций внутри потока. Размер блока для исследования - от 2 до 4096. Т.е. например, 100 бит. Если первые 100 бит и 5е 100 бит совпадают, то увеличиваю счетчик для такой комбинации.
Задача отобразить на графике все комбинации для блока данной длины. Т.е. и встречающиеся, и все отсутствующие. Т.е. если блок 2 бита, комбинация 01 встречается 3 раза и все, то на графике: 
00 - 0, 
01 - 3, 
10 - 0, 
11 - 0.
Вопрос: как сделать то же самое для блока 4096? Поскольку комбинаций 2^4096, то обрабатывать все это довольно долго. Может по частям или еще как-нибудь. При этом при выводе еще надо проверять было ли совпадение такой комбинации в файле, чтобы на оси "У" отобразилось нужное значение.
PM MAIL   Вверх
VOS
Дата 6.12.2007, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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 бита сравнить.

Немного сумбурно, но может поможет smile


Это сообщение отредактировал(а) VOS - 6.12.2007, 14:48
PM MAIL   Вверх
DeviceIK
Дата 6.12.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.12.2006

Репутация: нет
Всего: нет



Основную задачу я уже решил - статистику блоков ищу и отображаю на графике нормально. Препод сказал отобразить там же все оставшиеся комбинации для данной последовательности. Т.е. взять перебор от 0000000, 0000001, 00000010, ... 11111111. Которых нет в файле, то 0 на ординат, которые есть - то сколько насчитал. Вопрос в том как все перебрать, если длина блока 4096!
PM MAIL   Вверх
VOS
Дата 6.12.2007, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 31.1.2007

Репутация: нет
Всего: 8



Ну как. Считать только те, которые есть smile
Если тупо - берешь первые 4096 бит (512 байт) находишь  вхождения, сдвигаешь на бит следующие 512 и т.д.
Соответственно всех остальных - нет smile

PM MAIL   Вверх
xvr
Дата 7.12.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(DeviceIK @ 6.12.2007,  15:51)
Основную задачу я уже решил - статистику блоков ищу и отображаю на графике нормально. Препод сказал отобразить там же все оставшиеся комбинации для данной последовательности. Т.е. взять перебор от 0000000, 0000001, 00000010, ... 11111111. Которых нет в файле, то 0 на ординат, которые есть - то сколько насчитал. Вопрос в том как все перебрать, если длина блока 4096!

По поводу перебора от 0 до 1111... для 4096 бит:
Число вариантов 2**4096 ~ 10**1227
Если каждый вариант перебирается за 1 ns (10**-9 или 1G вариантов в сек), то на перебор всего уйдет ~ 10**1219 сек. Возраст солнечной системы ~1.8*10**17 сек. Делайте выводы  smile 
PM MAIL   Вверх
AntonChik
Дата 7.12.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 4.10.2005
Где: Красноярск

Репутация: 1
Всего: 1



думаю, задача не в практическом применении, а в "чисто теоретическом" написании алгоритма и в доказательстве того, что он способен доработать до конца без косяков)

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

и VOS  как раз привел вполне разумное начало к действиям)

Это сообщение отредактировал(а) AntonChik - 7.12.2007, 15:33
--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0670 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.