Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> оптимизация текстовой обработки, как ускорить 
:(
    Опции темы
Pitlord
Дата 6.12.2009, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: нет
Всего: 7



Цитата(motorway @  6.12.2009,  22:04 Найти цитируемый пост)
В общем, есть исходный файл на входе со всеми этими словами. Если он уже есть, значит, вроде что-то известно. Но так как он весьма большой, это дает разве что-нибудь? Этих слов там может быть миллион или больше

То, что после слова, после символа "|" — что это?
PM MAIL   Вверх
Simpliest
Дата 6.12.2009, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(Pitlord @  6.12.2009,  21:06 Найти цитируемый пост)
Я задал вопрос — где ответ? Или в твоём понимании время сортировки будет зависить от количества элементов линейно? Приведи реальный код. 

В моем понимании ты не умеешь читать. Вот тебе был ответ.
Цитата(Simpliest @  6.12.2009,  21:02 Найти цитируемый пост)
И не надо выдумывать то, о чем не говорилось.

Обработка будет именно со сложностью O(n), но данные должны прийти на обработку отсортированными. 


Код

// $a у нас отсортированный массив
foreach($a as $v) {
// обрабатываем со сложностью O(n).
}


Так доступно? Или разжевать, как школьнику?


--------------------
user posted image
PM   Вверх
Pitlord
Дата 6.12.2009, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: нет
Всего: 7



Цитата(Simpliest @  6.12.2009,  22:09 Найти цитируемый пост)
В моем понимании ты не умеешь читать. Вот тебе был ответ.

Я тебя спрашиваю ещё раз: как ты будешь отсортировывать?
PM MAIL   Вверх
motorway
Дата 6.12.2009, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Я могу дать код, который у меня. Пока что не оч. понял, как предлагается сделать. Ну допустим, что мы взяли первую строку исходного файла - там основное слово перед чертой, которое мы должны искать - "a". И нужно определить, есть ли оно во всех строках других, если есть, то объединить их по тому принципу сверху. Куда мы денемся от этого перебора всех строк в двойном цикле?

PM MAIL   Вверх
Simpliest
Дата 6.12.2009, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(motorway @  6.12.2009,  21:04 Найти цитируемый пост)
Основное, что нужно - чтобы комп не зависал при обработке, и она была не квадратичной зависимости от объема данных. 

 smile Отсортируй данные до обработки!!! или убейся.


--------------------
user posted image
PM   Вверх
motorway
Дата 6.12.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Цитата

То, что после слова, после символа "|" — что это? 

Некоторый набор слов, разделенный запятыми. В них и нужно искать вхождение слова перед |, но после скобки ")". Если оно есть, объединяем этот набор слов с искомым словом.

Добавлено через 3 минуты и 9 секунд
Цитата

Отсортируй данные до обработки!!! или убейся. 

Неплохо бы понять, как именно их сортировать. И всю структуру получившегося алгоритма согласно твоему предложению.
Лучше увидеть это в виде кода  smile 

PM MAIL   Вверх
Pitlord
Дата 6.12.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: нет
Всего: 7



Цитата(motorway @  6.12.2009,  22:10 Найти цитируемый пост)
Пока что не оч. понял, как предлагается сделать

Что именно? Уже три варианта предложено.
PM MAIL   Вверх
Simpliest
Дата 6.12.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(Pitlord @  6.12.2009,  21:10 Найти цитируемый пост)
Я тебя спрашиваю ещё раз: как ты будешь отсортировывать? 

Надцатью различными способами.

Захочу - еще до записи всех слов в файл буду сортировать.

Захочу - в процессе подготовки файла буду сортировать.
Алгоритмы Шелла, Квик, Вставкой, Блочный, а может предпочту встроенные функции PHP sort, usort, array_multisort
Тебе это сильно помогло?


--------------------
user posted image
PM   Вверх
motorway
Дата 6.12.2009, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Вот я не понимаю, берем первую строку и ищем во всех других, есть ли вхождение нужной подстроки среди элементов через запятую после знака | в других строках.
Нашли что-то, сформировали строку. Переходим к следующей строке исходных данных.
И опять перебираем все строки на наличие второго элемента (некоторые из них могли исчезнуть, но объем примерно тот же).
И вот виден вложенный цикл. Не понимаю, куда он может испариться в принципе.

PM MAIL   Вверх
Simpliest
Дата 6.12.2009, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(motorway @  6.12.2009,  21:12 Найти цитируемый пост)
 В них и нужно искать вхождение слова перед |, но после скобки ")". Если оно есть, объединяем этот набор слов с искомым словом

Бгг...

(word1)a|b,c,d
(word1)b|e,f,g,a
(word2)c|h,a
(word2)f|w,a,c

ищем букву а. Она есть во всех 4х строках мы ее ищем везде? Или все же как в первом сообщении, только при условии word1?

Цитата(motorway @  6.12.2009,  21:12 Найти цитируемый пост)
Лучше увидеть это в виде кода  

Кода не будет.


--------------------
user posted image
PM   Вверх
motorway
Дата 6.12.2009, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



только если word1. Но далее мы берем вторую строку, там уже будет b - и опять начинаем искать среди всех строк.

Это сообщение отредактировал(а) motorway - 6.12.2009, 22:26
PM MAIL   Вверх
Simpliest
Дата 6.12.2009, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(motorway @  6.12.2009,  21:21 Найти цитируемый пост)
И вот виден вложенный цикл. Не понимаю, куда он может испариться в принципе.

Парень, если ты бегаешь по всему миллиону слов, то у тебя алгоритм сложности O(n^2) и сортировка до одного места.

Если все же алгоритм зависит от слова word1/word2 etc.
То чем больше у тебя разных слов вида word1/word2,
тем ближе алгоритм к С*O(n)

Где C  у тебя отношение числа слов к числу уникальных слов.


--------------------
user posted image
PM   Вверх
motorway
Дата 6.12.2009, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Ну вот я и говорю, куда же денется эта самая сложность? На самом деле, слов в скобках типа word1, word2 мало очень по сравнению с другими словами a,b,c,d.
Может, даже меньше 10. А этих - тысячи, мильоны.
PM MAIL   Вверх
Simpliest
Дата 6.12.2009, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(motorway @  6.12.2009,  21:25 Найти цитируемый пост)
b - и опять начинаем искать среди всех строк.

Не надо нам искать среди всех. А только среди тех кто имеет word1 и находится ниже.

(word1)a|b,c,d
(word1)b|e,f,g,a

Или ты хочешь получить такой результат?
(word1)a|b,c,d,e,f,g
(word1)b|e,f,g,a,с,d




--------------------
user posted image
PM   Вверх
motorway
Дата 6.12.2009, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Т.е. слова word1,word2... в скобках (в начале строки) у многих слов одинаковы

Добавлено @ 22:31
Ну да, но чтобы узнать, имеется ли там word1, нужно все равно проверить каждую строку , пусть и ниже

Это сообщение отредактировал(а) motorway - 6.12.2009, 22:31
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.