![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Predator199 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 412 Регистрация: 1.2.2012 Репутация: -3 Всего: -4 |
Есть 100 т ip адресов. Нужно определить страну.
Вопрос: Сколько(минимум) уйдет времени если все написать грамотно? |
|||
|
||||
| Arantir |
|
|||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
Существует 40 тыс. разных диапазонов IP-адресов по странам. Соответственно это 8 млрд. сравнений в самом плохом случае. А что такое 8 млрд. сравнений "больше/меньше" для современного компьютера...
Ну плюс, может быть, еще запись результата (страны) и еще какие факторы. И минус отсеивание удачными попаданиями. По плотности вероятностей нормального распределения таких должно быть процентов 60%... Ну ладно, это я уже немного гоню =) А вообще... Это все можно сделать бинарным поиском. Тогда операций будет, ммм..., пару млн. Что раз в 800 быстрее. Но это в худшем случае. С учетом количества данных кол-во операций где-то около миллиона, если будут затронуты все страны... Короче за доли секунды все это можно сделать, если сделать хорошо. Бинарный поиск под диапазоны несложно подстроить. При делении пополам сравнивать верхний IP с крайнего диапазона левой части и нижний IP с крайнего диапазона правой. Для эффективности существует метод перевода IP в целое число с сохранением их порядка относительно друг друга. То есть сравнение двух IP можно свести к сравнению двух чисел. Определение страны для одного IP таким образом должно занять у компьютера всего лишь по 15 сравнений двух целых чисел. 1.5 млн. сравнений - это, по сути, ничто для современного компьютера. Это сообщение отредактировал(а) Arantir - 9.12.2012, 22:39 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
| Arantir |
|
|||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
Ох, а если еще отсортировать все адреса за log(n), а потом отбрасывать из диапазонов лишние части по мере прохождения по адресам, то можно еще раз в 5 все это ускорить. Будут вообще сущие миллисекунды.
Это сообщение отредактировал(а) Arantir - 9.12.2012, 22:36 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
| Predator199 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 412 Регистрация: 1.2.2012 Репутация: -3 Всего: -4 |
Спс. Удивился ,что можно в миллисекунды уложиться.Я то думал минимум 10-20 сек при помощи js.
Слышал js быстрей работает чем php. Переписав на js еще быстрей будит, если не ошибаюсь. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
на С++ переписать — быстрее будет. а джаваскрипт — при чем? ты и базу на клиента закачаешь, и список адресов для распознавания? а потом обратно передашь?
Arantir, отлично расписал. конечно, это будет всяко быстрее 100 000 × 40 000 сравнений |
|||
|
||||
| Arantir |
|
|||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
JS? JavaScripts, что ли?
А зачем парсить 100000 IP через JavaScripts? По-моему, достаточно по одному разу для каждого IP узнать страну и сохранить где-то себе в БД. 100 тыс. раз найти IP среди 100 тыс. имеющихся IP - это быстрее, чем 100 тыс. раз определить страну. А на один раз уж хоть на паскале можно писать. Добавлено: Ха, а если подумать... То получается, что определять страну "на ходу" - быстрее! Ведь диапазонов-то меньше... Это сообщение отредактировал(а) Arantir - 9.12.2012, 23:29 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
| Predator199 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 412 Регистрация: 1.2.2012 Репутация: -3 Всего: -4 |
Спасибо.
|
|||
|
||||
| Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Если уж надо совсем быстро-быстро....
То я бы просто выбирал результат по индексу массива (адресу ячейки памяти) -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |