Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

06.02.2007, 16:29
|
|
Участник форума
Регистрация: 07.12.2006
Сообщений: 192
Провел на форуме: 492591
Репутация:
123
|
|
подскажите алгоритм
Народ подскажите, как считать большой текстовый файл(допустим словарь) и очистить его от повторов или наоборот, например найти элемент повторяющийся наибольшее кол-во раз, какой самый быстрый способ (желательно на php)?
|
|
|

06.02.2007, 20:40
|
|
Постоянный
Регистрация: 14.01.2007
Сообщений: 459
Провел на форуме: 1469995
Репутация:
589
|
|
Убирал совпадения из фалика в 200000 строк таким макаром:
Код:
<?php
$data_in = file("numbers.txt");
$data2 = file("base_final.txt");
$data_in = array_merge($data_in, $data2);
sort(&$data_in);
$t = count($data_in);
$iterator = 0;
$data_out = array();
$data_out[] = $data_in[0];
for($i = 1; $i < $t; $i++)
{
if($data_in[$i] != $data_in[$iterator])
{
$data_out[] = $data_in[$i];
$iterator = $i;
}
}
file_put_contents("base_final.txt", join("", $data_out));
echo "Done! Total " . count($data_out) . " items";
?>
|
|
|

06.02.2007, 20:50
|
|
Участник форума
Регистрация: 27.01.2006
Сообщений: 118
Провел на форуме: 402743
Репутация:
22
|
|
А еще бы комментов ......
|
|
|

06.02.2007, 20:52
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
>>Народ подскажите, как считать большой текстовый файл
2Helios мало того что алгоритм неэффективен так он еще и под заданную задачу не подходит.
|
|
|

07.02.2007, 14:10
|
|
Постоянный
Регистрация: 14.01.2007
Сообщений: 459
Провел на форуме: 1469995
Репутация:
589
|
|
Комменты:
После считывания файла все его строки сортирую, при этом одинаковые окажутся рядом. На это совпадение и проверяю. При желании можно прикрутить strtoupper/strtolower дабы не обращать внимания на регистр.
2ZaCo Напиши эффективнее, ты ж чингачкук.
|
|
|

07.02.2007, 20:00
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
2Helios я напишу вот только задачи не вижу.
|
|
|

07.02.2007, 20:10
|
|
Постоянный
Регистрация: 09.07.2006
Сообщений: 937
Провел на форуме: 1948091
Репутация:
1686
|
|
Сообщение от Helios
Комменты:
После считывания файла все его строки сортирую, при этом одинаковые окажутся рядом. На это совпадение и проверяю. При желании можно прикрутить strtoupper/strtolower дабы не обращать внимания на регистр.
2ZaCo Напиши эффективнее, ты ж чингачкук.
понимаешь твоя ошибка в том что при сортировке тебе полюбому придется заносить все в массив и они будут немеренно жрать оперативы о-- особенно если словарь метров на 300 ---
|
|
|

07.02.2007, 20:48
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
понимаешь твоя ошибка в том что при сортировке тебе полюбому придется заносить все в массив и они будут немеренно жрать оперативы о-- особенно если словарь метров на 300 ---
Либо память, либо скорость.
Т.к. память безгранична за счет раздела подкачки, то... 
|
|
|

07.02.2007, 21:48
|
|
Участник форума
Регистрация: 07.12.2006
Сообщений: 192
Провел на форуме: 492591
Репутация:
123
|
|
2 ZaCo задача - находить повторяющиеся элементы в текстовом файле и производить с ними различные действия
Последний раз редактировалось Termin@L; 07.02.2007 в 21:51..
|
|
|

08.02.2007, 11:17
|
|
Постоянный
Регистрация: 14.01.2007
Сообщений: 459
Провел на форуме: 1469995
Репутация:
589
|
|
Скрипт ентот исполняться будет не сотню раз одновременно, а в один поток, поэтому на ОЗУ жаловаться ИМХО нет смысла. А насчет того, что считывать нужно весь файл сразу - в другом случае прогонять поиск совпадений по циклу и сортировку пришлось бы после каждого считывания => время исполнения увеличилось бы в разы.
З.Ы.: Кто знает другие варианты - пишите, а то и самому интерессно)
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|