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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Во сколько можно уложиться. 
:(
    Опции темы
Predator199
  Дата 9.12.2012, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть 100 т ip адресов. Нужно определить страну. 
Вопрос:
Сколько(минимум) уйдет времени если все написать грамотно?
PM MAIL   Вверх
Arantir
Дата 9.12.2012, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 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
}
PM   Вверх
Arantir
Дата 9.12.2012, 22:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 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
}
PM   Вверх
Predator199
  Дата 9.12.2012, 23:05 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спс. Удивился ,что можно в миллисекунды уложиться.Я то думал минимум 10-20 сек при помощи js.
Слышал js быстрей работает чем php. Переписав на js еще быстрей будит, если не ошибаюсь.
PM MAIL   Вверх
skyboy
Дата 9.12.2012, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



на С++ переписать — быстрее будет. а джаваскрипт — при чем? ты и базу на клиента закачаешь, и список адресов для распознавания? а потом обратно передашь?
Arantir, отлично расписал. конечно, это будет всяко быстрее 100 000 × 40 000 сравнений smile
PM MAIL   Вверх
Arantir
Дата 9.12.2012, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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

Репутация: 16
Всего: 55



JS? JavaScripts, что ли? 
А зачем парсить 100000 IP через JavaScripts? smile 

По-моему, достаточно по одному разу для каждого IP узнать страну и сохранить где-то себе в БД.
100 тыс. раз найти IP среди 100 тыс. имеющихся IP - это быстрее, чем 100 тыс. раз определить страну.
А на один раз уж хоть на паскале можно писать.


Добавлено:
Ха, а если подумать... То получается, что определять страну "на ходу" - быстрее! smile   smile 
Ведь диапазонов-то меньше...

Это сообщение отредактировал(а) Arantir - 9.12.2012, 23:29


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Predator199
  Дата 9.12.2012, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо.
PM MAIL   Вверх
Fortop
Дата 10.12.2012, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Если уж надо совсем быстро-быстро....

То я бы просто выбирал результат по индексу массива (адресу ячейки памяти)


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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