Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   подскажите алгоритм (https://forum.antichat.xyz/showthread.php?t=32842)

Termin@L 06.02.2007 16:29

подскажите алгоритм
 
Народ подскажите, как считать большой текстовый файл(допустим словарь) и очистить его от повторов или наоборот, например найти элемент повторяющийся наибольшее кол-во раз, какой самый быстрый способ (желательно на php)?

Helios 06.02.2007 20:40

Убирал совпадения из фалика в 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";
?>


Srg 06.02.2007 20:50

А еще бы комментов :)......

ZaCo 06.02.2007 20:52

>>Народ подскажите, как считать большой текстовый файл
2Helios мало того что алгоритм неэффективен так он еще и под заданную задачу не подходит.

Helios 07.02.2007 14:10

Комменты:
После считывания файла все его строки сортирую, при этом одинаковые окажутся рядом. На это совпадение и проверяю. При желании можно прикрутить strtoupper/strtolower дабы не обращать внимания на регистр.

2ZaCo Напиши эффективнее, ты ж чингачкук.

ZaCo 07.02.2007 20:00

2Helios я напишу вот только задачи не вижу.

genom-- 07.02.2007 20:10

Цитата:

Сообщение от Helios
Комменты:
После считывания файла все его строки сортирую, при этом одинаковые окажутся рядом. На это совпадение и проверяю. При желании можно прикрутить strtoupper/strtolower дабы не обращать внимания на регистр.

2ZaCo Напиши эффективнее, ты ж чингачкук.

понимаешь твоя ошибка в том что при сортировке тебе полюбому придется заносить все в массив и они будут немеренно жрать оперативы о-- особенно если словарь метров на 300 ---

nerezus 07.02.2007 20:48

Цитата:

понимаешь твоя ошибка в том что при сортировке тебе полюбому придется заносить все в массив и они будут немеренно жрать оперативы о-- особенно если словарь метров на 300 ---
Либо память, либо скорость.
Т.к. память безгранична за счет раздела подкачки, то... ;)

Termin@L 07.02.2007 21:48

2 ZaCo задача - находить повторяющиеся элементы в текстовом файле и производить с ними различные действия

Helios 08.02.2007 11:17

Скрипт ентот исполняться будет не сотню раз одновременно, а в один поток, поэтому на ОЗУ жаловаться ИМХО нет смысла. А насчет того, что считывать нужно весь файл сразу - в другом случае прогонять поиск совпадений по циклу и сортировку пришлось бы после каждого считывания => время исполнения увеличилось бы в разы.

З.Ы.: Кто знает другие варианты - пишите, а то и самому интерессно)


Время: 12:19