|
|
| Посл.отвђт | Сообщен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 |