· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.A&O —› Опять избыточность...

Посл.отвђт Сообщенiе


Дата: Ноя 17, 2003 21:26:42

Видать эта тема мне покоя не даст...
Смысл. Мне надо удалить повторяющиеся элементы в массиве (уже ненавижу эти слова). На данный момент используется алгоритм, напоминающий пузырьковую сортировку. Иными словами, n^2 вычислений.
while(есть еще записи в массиве)
{
   while(от [i+1] до конца массива)
   {
     if(i == [i+x]}
       уничтожить запись под номером i+x;
   }
   уничтожить запись i;
}


Короче, общий смысл понятен - просто тупо сравнить первую запись со всем массивом, потом вторую запись со всем массивом, и так далее...
Проблема в строке if(i == [i+x]} - я не могу легко сказать, идентичны ли записи друг другу. Вместо этого используется зубодробительная процедура проверки, мной же и написанная. Примеры записей:
213	protein	GenBank	CAA97944	1370472	4932	protein	GenBank	CAA96839	132 2697	4932|||173449	198874|||6325028	6321308
216	protein	GenBank	NP_010254	6320174	4932	protein	GenBank	NP_012332	6 322258	4932|||427860	316704|||6320174


Эти две записи могут быть, а могут и не быть одним и тем же. Сортировать ТАКОЕ смысла не имеет... Видимо, мне никуда не убежать от сравнения данной записи со всеми остальными... Словом, я в расстройстве. Алгоритмисты??? Есть ли способ уйти от пузырька? Дробить напополам и искать в половинках? Что-нибудь?


Дата: Ноя 17, 2003 22:59:50

Дошло, кажись. На принципах быстрой сортировки. При этом гупать одинаковые элементы. Все. Забыли.


Дата: Ноя 18, 2003 01:04:24

Дубина я. Можно и еще эффективнее - через специальный хеш для строки. Хеши в перле построены на красно-черных деревьях. Работать будет вообще мнгновенно...


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.056