Частота повторяющихся элементов в массиве

Silex

unitecsys
Частота повторяющихся элементов в массиве

Появилась необходимость сделать статистику по частоте задаваемых слов в системе поиска, чтобы, скажем, показать админу десятку самых популярных. Пока что дошел до того, чтобы свалить все из базы в строку, затем рассовать все слова по элементам массива и... банально в цикле сравнивать поэлементно с остальными, увеличивая счетчик для каждого слова и затирая совпавшие слова, чтобы их заново не сравнивать. Сложность - меньше n*n, т.е. число итераций будет равно количеству уникальных слов плюс проверка на "затертость".

Пока не реализовывал, хотелось бы услышать мнение по поводу быстродействия на 10-15 тысячах слов. Может, кто другое что-нибудь предложит? Еще мысль была сначала все это отсортировать, но так еще дольше по идее...
 

Vladimirovich

Guest
Re: Частота повторяющихся элементов в массиве

Автор оригинала: Silex
Появилась необходимость сделать статистику по частоте задаваемых слов в системе поиска, чтобы, скажем, показать админу десятку самых популярных. Пока что дошел до того, чтобы свалить все из базы в строку
а база не сможет? если я правильно понял тебе надо
select Query, count(*) as Qnt from Table group by Query order by Qnt desc limit 10
?
 

Silex

unitecsys
2 Vladimirovich
Спасибо, у тебя все правильно, но для случая, когда в поле лежит по одному слову. У меня же хранится весь запрос типа "слово1 слово2 слово3"

2 AnToXa
Я просто тащусь! У меня сейчас мануал открыт как раз на функциях массива, так до этой ссылки все просмотрено, а ее я почему-то пропустил и пошел смотреть дальше!!! Сейчас сортировки досматриваю :) Спасибо, тему можно закрывать.
 

Silex

unitecsys
Нет, со сложностьюя в начальном сообщении я все-таки напутал. Должно быть сумма i по i от 1 до n и все умножить на n (первое - идем по массиву, второе - сравниваем на "затертые" элементы). Это в худшем случае.
 

RomikChef

Guest
силекс, а кто тебе мешает класть по одному слову?
 

Silex

unitecsys
Да, собственно говоря, только полчаса до конца рабочего времени :) Просто в разрабатываемой системе статистики планировалось отслеживать о юзере также его поисковые запросы, но, действительно, никто же не мешает укладывать в базу с каждым отдельным словом айдишник юзера или идентификатор сессии.

PS Странно, но установленный факт: люди, не занимающиеся программированием, называют меня Сайлексом (помнят правило открытого слога), а программеры - Силексом. Профессиональная психология, однако :)
 
Сверху