Форум умных людей

Задачи и головоломки => Логические задачи и головоломки => Тема начата: Lkob от Март 22, 2010, 12:28:05



Название: Google
Отправлено: Lkob от Март 22, 2010, 12:28:05
(http://uaimages.com/images/420256google.jpg) (http://uaimages.com)


18 200 000 результатов за 0,14 сек.
Объясните, как это возможно!


Название: Re: Google
Отправлено: Lkob от Март 22, 2010, 13:20:37
Поисковая система Google

Поисковая система Google представляет собой мощный механизм. Без таких поисковых систем найти информацию в глобальной сети Интернет было бы практически невозможно. Подобно всем поисковым серверам Google использует специальный поисковый алгоритм для получения результатов поиска. Некоторые основные характеристики алгоритма компания не скрывает, особенность же алгоритма является строгой тайной компании. Именно благодаря этому Google сохраняет свое лидерство в сети Интернет и не позволяет никому взломать ее систему.

Как и большинство поисковых серверов, Google использует программный поисковый механизм, называемый «паук» или «ползунок», для автоматического выбора всех документов, на которые есть ссылки в первом выбранном документе. Ключевые слова вписываются в специальную строку ввода, после чего начинается поиск. Особенность Google заключается в том, как и по какому критерию эта поисковая система классифицирует результаты поиска на своей странице. Используемый алгоритм PageRank сортирует все веб страницы по критерию смыслового соответствия.

Алгоритм PageRank зависит от нескольких факторов:

•   От частоты повторения и местоположения ключевых слов на веб странице – если искомое слово или фраза только один раз встречается на сайте, то страница получает низкий бал.
•   От времени существования страницы – каждый день в Интернете появляются новые сайты, но не многие задерживаются надолго. Поэтому преимущество отдается уже зарекомендовавшим себя сайтам, существующим долгое время.
•   От количества веб станиц, связанных с «главной страницей» - Google «смотрит» на количество веб страниц, относящихся к определенному сайту и определяет ее рейтинг среди всех остальных.
Самым главным фактором для отбора информации из трех выше перечисленных считается третий. Чтобы понять его принцип, давайте в качестве примера рассмотрим сайт "Planet Earth."

Чем больше веб страниц примыкает к сайту Discovery's Planet Earth, тем больше его «рейтинг», т.е. его номер в списке найденных страниц. Получив самый высший ранг, эта страница займет первое место среди результатов поиска.

Систему Google практически невозможно обхитрить, потому что все ссылки на веб страницы она воспринимает как «голоса». Самый лучший способ обеспечить своему сайту первые места, это напичкать его самой разнообразной информацией, которая будет привлекать больше людей. Чем больше ссылок на вашей веб странице, тем выше будет оценка поискового агента PageRank.

Ссылки

Компании Google постоянно приходится бороться с «жуликами», которые пытаются обмануть ее систему и повысить уровень своего сайта. Но для них Google припасла несколько трюков. Например, если на главной странице сайта размещается слишком много ссылок на другие веб-страницы, то ее рейтинг сильно падает. Даже веб-страница с высоким рейтингом PageRank и множеством исходящих ссылок на другие источники рискует потерять свое место в результатах поиска, отдав его менее ранжированной странице с меньшим количеством исходящих ссылок.

А вот тут интересная статья. http://biztimes.ru/index.php?artid=4


Название: Re: Google
Отправлено: Lkob от Март 22, 2010, 22:57:22
подумать действительно есть над чем, просто полагаю времени потребует поболе, а его пока много нет, так что я думаю все будут писАть, если будет что сообщить. мне пока увы - нечего сообщить по существу ???

Суть-то какова? Постараюсь объяснить. Когда запускаешь поиск на своем ПК, то PC начинат сравнивать текст с имеющимися файлами. Попробуйте найти 111 на жестком диске С: у себя на компьютере. Это займет где-то 10-50 минут (зависит от объема ХДД, процессора и т.д.) Но если в гугле написать 111, то за 0,50 сек найдется 493 000 000 результатов. Учитывая, что в интернете информации не 50 Гигабайт, как диск С:, а ТЕРАБАЙТЫ (просто не знаю, что больше терабайта)... Появляется вопрос: КАКИМ ОБРАЗОМ?  :wall:


Название: Re: Google
Отправлено: Маша от Март 22, 2010, 22:59:08
Я вообще не очень понимаю о чем вы  :tomato: но у меня на запрос Википедия выдает
 
Цитировать
Результати 1 – 10 з приблизно 4 370 000 на запит Википедия. (0,25 сек)


Название: Re: Google
Отправлено: Lkob от Март 22, 2010, 23:04:39
Маша, давайте подумаем о том, как работает поисковик в интернете. По-теории он должен создать свою базу данных, в которой будет отмечено, что на таком-то сайте такая и такая информация. И если человек введет такое-то слово, то ему надо под его запрос вывести такие-то ссылки... Но вот вопрос в чем! Как можно за 0,25 сек проверить такую базу данных, в которой только 4 370 000 записей соответствовало нужному запросу? Как это сделать?


Название: Re: Google
Отправлено: Lkob от Март 22, 2010, 23:20:42
Более того. Еще надо учесть, что в запросе можно написать и на английском + на русском + на испанском. И поисковик это тоже "скушает"...

Я думаю так, что он берет первое слово и раскладывает по буквам. Т.е. в слове "Википедия" первая буква "В", а значит можно не искать слова, которые начинаются с других букв. Это сокращает поиск до 1/33. Дальше вторая буква и т.д. Но это было бы слишком просто. И не так быстро.


Название: Re: Google
Отправлено: Lkob от Март 22, 2010, 23:26:47
Но это для начала. Дальше можно придумыть более интересные вещи!  :wall:


Название: Re: Google
Отправлено: buka от Март 22, 2010, 23:36:17
Маша, давайте подумаем о том, как работает поисковик в интернете. По-теории он должен создать свою базу данных, в которой будет отмечено, что на таком-то сайте такая и такая информация. И если человек введет такое-то слово, то ему надо под его запрос вывести такие-то ссылки... Но вот вопрос в чем! Как можно за 0,25 сек проверить такую базу данных, в которой только 4 370 000 записей соответствовало нужному запросу? Как это сделать?
Давайте думать вместе.
Начнем с примитивнейшего поисковика, который может найти слово или совокупность слов, но не в состоянии найти фразу или, скажем совокупность слов в заданной последовательности.
А потом мы вместе будем думать дальше.
Такой примитивный поисковик действительно может работать быстро.
Естественно, он не будет по запросу заходить в миллионы сайтов и читать их.
Но он создаст несколько таблиц.
1. Таблица сайтов (блоков) где каждому блоку будет присвоен номер. Т.е. таблица с номером как индекс и линком на блок, как содержимое этого индекса.
Каждый новый блок получает свой номер, естественно.
2. Таблица слов.
Эта таблица - более сложная.
Индекс для неё - слово и все слова просортированы (для конкретного языка слов не так много - единицы миллионов)
А данными для каждого слова будет список номеров блоков, где это слово встречается. В принципе эту информацию можно сжать, введя, например, ещё и тип записи - если слово встречается редко - список номеров блоков, где встречается, если очень часто - список блоков, где не встреч ается, если средне - битвектор, где 1-ми будут помечены индексы, где встречаются, 0-ми - остальное.
Тогда слово в такой таблице найти просто и быстро...


Название: Re: Google
Отправлено: Lkob от Март 22, 2010, 23:41:19
Это хорошая идея. Но вопрос - сколько ж тогда надо создать таких "блоков". Ведь такая таблица слов будет грандиозно громадная. А если говорить о таблице "слово+слово", либо "слово+слово+слово", либо "слово на русском+слово на укринском+слово на французком+цифры" - нереально! :)


Название: Re: Google
Отправлено: Lkob от Март 22, 2010, 23:47:56
А теперь самое забавное. Сегодня я выкладывал задачки и в один момент мне надо было дать ответ на задачку. Печатать не сильно люблю - решил в гугле написать условие задачи, а дальше ctr;+c ctrl+v. Вот что забавно - первый сайт - форум НАЗВА. Т.е. что получается? Гугл нашел то сообщение, которое я оставил сегодня? Но ведь тогда ему набо проверить все сайты на всей нашей Земле? Но ведь это не реально! Более того - это не реально за 0,60 секунд!
Блин, как они это делают? Мистика?
Нет!


Название: Re: Google
Отправлено: Smith от Март 22, 2010, 23:50:39
мне кажется, вы сейчас изобретаете велосипед. тот факт что мы не знаем, как это делается не означает конечно что мы не можем этого узнать. просто я предполагал завтра погуглить собственно этот вопрос.
можно попробовать рассуждать как предлагает buka и lkob, но тогда нужно как минимум разбираться в том, что, вот например, террабайт - это действительно много для современного мощного компьютера. или нет. и сколько байт займут те самые единицы миллионов слов, и перевести все это в частоту процессора или во что еще, чтобы оценить скорость обработки?!
потом попытаться оценить это всё (как? в сравнении с чем-то, вероятно??) и только потом робко вынести предварительное суждение - реально или не очень..)))


Название: Re: Google
Отправлено: Lkob от Март 22, 2010, 23:56:38
Цитировать
мне кажется, вы сейчас изобретаете велосипед. тот факт что мы не знаем, как это делается не означает конечно что мы не можем этого узнать. просто я предполагал завтра погуглить собственно этот вопрос.
можно попробовать рассуждать как предлагает buka и lkob, но тогда нужно как минимум разбираться в том, что, вот например, террабайт - это действительно много для современного мощного компьютера. или нет. и сколько байт займут те самые единицы миллионов слов, и перевести все это в частоту процессора или во что еще, чтобы оценить скорость обработки?!
потом попытаться оценить это ысе 9как? в сравнении с чем-то. вероятно?) и только потом робко вынести предварительное суждение - реально или не очень..)))

Все сложнее. Для того, чтобы понять, что это сложно, достаточно запустить на своём компьютере прямо сейчас поиск какого-либо файла на диске С:. Проверьте, но это займет много времени!

Smith, а я гуглил. Все, что нашел - это фразу: "Разработчики Гугл держат в секрете алгоритм своей програаммы. И вообще, только единицы знают, как это работает"

Я не предлагаю разгдать их алгоритм. Но считаю, что было бы классно подумать над этой темой и прийти к хотя бы приближенному пониманию, как это можно сделать....

P.S. Я без понятия, как это реально! :whiteflag: Очень надеюсь, что Вы, ребята,  предложите интересные алгоритмы!  :)


Название: Re: Google
Отправлено: Илья от Март 23, 2010, 09:02:42
Интересно, а какова была скорость нахождения и количество результатов у первого кто ввел запрос на слово "Википедия"? Такая же как и у 100-го, 1000-го?


Название: Re: Google
Отправлено: Lkob от Март 23, 2010, 09:42:25
Интересно, а какова была скорость нахождения и количество результатов у первого кто ввел запрос на слово "Википедия"? Такая же как и у 100-го, 1000-го?

Из того, что удалось вычитать. Да, скорость запроса будет разной. Дело в том, что гугл расставляет приоритеты для каждого сайта: как давно он существует, как часто посещается, сколько полезных ссылок на другие ресурсы и какой рейтинг этих ресурсов! и т.д.

Но у меня появился другой вопрос. К примеру, берем 2 компьютера, которые находятся в разных местах (каждый имеет свой IP, естественно). В один и тот же момент задаем один и тот же запрос в гугле - ВИКИПЕДИЯ. Одинаково ли будет количество найденных ответов и одинаково ли будет время поиска?


Название: Re: Google
Отправлено: Lkob от Март 23, 2010, 09:44:34
А вот что написал в ответе знакомый true-программист:

вопревых там сервачины просто пиз**нуться какие. А во вторых он делает по сути(грубо говоря) два запроса первый: select TOP 10 ... from ... тут выбирает первые 10 для показа на первой странице. второй запрос делает вида: select COUNT(0) from - этот запрос вернет одну запись с количеством строк для текущего условия. На уровне сервера он отработает практически моментально. когда идем по страницам то запрос выбирает просто следующие 10 и т.д. В целом, так работает практически любой датасет в любом языке программирования...


Название: Re: Google
Отправлено: ? от Март 23, 2010, 10:37:15
Установил Google Desktop - фигня полная.  :bad3: Недоделанный, как и, к сожалению, все продукты Google :(


Название: Re: Google
Отправлено: Л.К.Вольфхарт от Март 23, 2010, 18:49:06
Я так думаю по теме.
1. Для начала определяется сегмент интернета. Заметили что сразу нас переводят на гугл.ком.уа, гугл.ру?
2.Хотя информации и петабайты (тысяча терабайтов), но у гугл просто ОГРОМНЫЕ вычислительные мощности, супер компьютеры и т.д. некорректно сравнивать с поисковиком на компе - Винда есть Винда)


Название: Re: Google
Отправлено: ? от Март 25, 2010, 13:03:54
Цитировать
Хотя информации и петабайты (тысяча терабайтов), но у гугл просто ОГРОМНЫЕ вычислительные мощности, супер компьютеры и т.д. некорректно сравнивать с поисковиком на компе - Винда есть Винда)
А то что компьютером одновременно пользуется один-три человека, а гуглом десятки-сотни тысяч тебя не смущает? :)


Название: Re: Google
Отправлено: Л.К.Вольфхарт от Март 25, 2010, 20:42:29
Цитировать
Хотя информации и петабайты (тысяча терабайтов), но у гугл просто ОГРОМНЫЕ вычислительные мощности, супер компьютеры и т.д. некорректно сравнивать с поисковиком на компе - Винда есть Винда)
А то что компьютером одновременно пользуется один-три человека, а гуглом десятки-сотни тысяч тебя не смущает? :)
Ну нет) Я же пишу - огромные компы и другое ПО


Название: Re: Google
Отправлено: Lkob от Март 26, 2010, 01:46:10
Эту тему можно закрыть. Изначально, это был интересный вопрос, но теперь.... нет....
Все дело в том, что гугл не ищет сразу 4 589 985 356 результатов... У него есть база данных, из которой он выбирает только 10, соответствующих вашему запросу (для этого не надо очень много итераций).

 Как оказалось, все очень просто.

Если кому интересно, я докажу, что количество запросов, которые пишет гугл - глупость. Он сам не знает, сколько результатов в итоге будет... :)


Название: Re: Google
Отправлено: buka от Март 26, 2010, 01:53:00
Эту тему можно закрыть. Изначально, это был интересный вопрос, но теперь.... нет....
Все дело в том, что гугл не ищет сразу 4 589 985 356 результатов... У него есть база данных, из которой он выбирает только 10, соответствующих вашему запросу (для этого не надо очень много итераций).

 Как оказалось, все очень просто.

Если кому интересно, я докажу, что количество запросов, которые пишет гугл - глупость. Он сам не знает, сколько результатов в итоге будет... :)
А как он находит эти десять?
Особенно, если ищется фраза?
Ещё более простой вопрос.
Как он убеждается, что конкретной фразы нет, если все слова присутствуют в миллионе ссылок?


Название: Re: Google
Отправлено: Lkob от Март 26, 2010, 02:00:28
Buka, все весьма просто. Гуглу не надо находить сразу 5 543 474 485 результатов. Он делает проще. Он сравнивает перую букву, которую вы ввели, далее втору, третью и т.д. Этот запрос можно решить на самом "не быстром" компьютере очень быстро. Вот в чем секрет.
Как написал мой знакомый программист, так работает любой дадасет.


Название: Re: Google
Отправлено: buka от Март 26, 2010, 02:48:57
Buka, все весьма просто. Гуглу не надо находить сразу 5 543 474 485 результатов. Он делает проще. Он сравнивает перую букву, которую вы ввели, далее втору, третью и т.д. Этот запрос можно решить на самом "не быстром" компьютере очень быстро. Вот в чем секрет.
Как написал мой знакомый программист, так работает любой дадасет.
Ну, скажем, сравнил 1-ю букву (напр. Й), взял К первых попаданий,
сравнил вторую букву (напр. У), взял К первых попаданий,
сравнил 3-ю букву (напр. Х), взял К первых попаданий,
допустим далее, что все 3 буквы присутствуют в М ссылок из К.
Как ему убедиться, что он нашёл ЙУХ, а не наоборот?
Качать все М ссылок и сравнивать он не вложится ни в какие рамки.
Я уже не говорю о "ХАПУГОЙ" или "моЙ мУж ХУлиган"


Название: Re: Google
Отправлено: Илья от Март 26, 2010, 07:33:40
Цитировать
что количество запросов, которые пишет гугл - глупость.
И тут развод. :girlcry:


Название: Re: Google
Отправлено: Deaduwka от Март 26, 2010, 12:56:13
Buka, все весьма просто. Гуглу не надо находить сразу 5 543 474 485 результатов. Он делает проще. Он сравнивает перую букву, которую вы ввели, далее втору, третью и т.д. Этот запрос можно решить на самом "не быстром" компьютере очень быстро. Вот в чем секрет.
Как написал мой знакомый программист, так работает любой дадасет.
Ну я не так писал) сам запрос строится аццкой машиной смерти гугла, благодаря умам сумасшедших профессоров, которые сгенерили алгоритмы. но если говорить проще, то при первом заходе на страницу клиенту (тоесть браузеру) сервер отдают по факту 11 записей (10 ссылок и количество).
Что касается по поводу "вхождений" и "попаданий". Тут все решается на уровне сервера БД + ихняя хитрая структура данных. Вы же не думаете, что гугл при вашем запросе начинает заходить на сайты и искать постранично ваш текст? )) У него своя БД, которая наполняется благодаря граммотному СЕО, sitemap'ам, структуре сайта... наполняет эту БД гугл-бот...
Ну и да.. lkob, побуквенно никто никогда нигде не сравнивал) сравнение идет по словам конечноже .. select .. from .. where title like %Леша - клевый чувак% выберет сайты у которых в заголовке написано, что Леха - клевый чувак )


Название: Re: Google
Отправлено: Алекс Г от Март 26, 2010, 23:56:07
я седня зарегился и еще не знаю, умный я или нет, но позвольте маленький коммент. если я правильно понял, что гугл сравнивается с поиском на жестком диске, то это конечно не совсем корректно. У стандартного средства Винды нет базы данных с индексами всех слов, которые могут подлежать поиску, поэтому происходит реальный просмотр всех файлов, что конечно очень медленно.  А у Гугла как выше и написали всё уже проиндексировано. Если на локальный комп поставить Гугл Десктоп (который тоже выше упоминался), то поиск и на локальном компе будет занимать доли секунды. Правда база очень большая - несколько гигов минимум.


Название: Re: Google
Отправлено: buka от Март 27, 2010, 00:55:58
Вопрос в том, на каком уровне происходит индексирование.
Если на уровне слов, то можно вложиться в гигабайты, но тогда как искать фразы?
Если на уровне фраз, то ни в гига ни в тера, ни в пета не вложиться...


Название: Re: Google
Отправлено: Алекс Г от Март 27, 2010, 01:06:16
Вопрос в том, на каком уровне происходит индексирование.
Если на уровне слов, то можно вложиться в гигабайты, но тогда как искать фразы?
Если на уровне фраз, то ни в гига ни в тера, ни в пета не вложиться...

понятно. думаю, что на уровне слов и все. если поиск одного слова занимает например 0,1 сек. то фраза из N слов будет искаться в базе 0,1N секунд + затраты на аггрегацию данных. Учитывая, что N в среднестатистическом запросе порядка 1-5, время не сильно меняется при умножении на N. Аггрегация в принципе тоже может быть подготовлена заранее наверное. Хотя как? да, вот это интересный вопрос. Например число парных комбинаций (для образования связей между хотя бы двумя понятиями) при словаре в 30000 слов составит 30000!=10^121287 (калькулятор Винды подсказал). Очень много. Вопрос действительно интересный, актуальный, и наверное сложный.


Название: Re: Google
Отправлено: Маша от Март 30, 2010, 20:04:18
Просто к слову ;)
(http://s12.radikal.ru/i185/1003/bc/3ae9bf791d1d.jpg)


Название: Re: Google
Отправлено: Lkob от Март 30, 2010, 20:28:56
Из той же серии. :)
(http://uaimages.com/images/6700410000001.jpg) (http://uaimages.com)


Название: Re: Google
Отправлено: Маша от Март 30, 2010, 20:33:20
Это все болезненные вопросы :laugh:А вот научиться ходить на зубах, это посерьезней  вопросик :D


Название: Re: Google
Отправлено: Lkob от Март 30, 2010, 20:35:36
Согласен. :)


Название: Re: Google
Отправлено: gruvy от Март 31, 2010, 00:23:37
ну  не знаю что вы так заморочились
для начало  нужно понимать что  у серверов гугла террабайты  оперативной памяти ( она  в  раз в 100 быстрее, но и это мало )))
 
я все же могу  быть неправ но вряд ли  сильно грубо
гугл  это большой мнемонический мозг )))
он неделями  - месяцами обрабатывает и индексирует страницы, переводя в удобный ему язык на  кучу  параллельных серваков, фактически  поисковики  копируют ВЕСЬ интернет к себе на серваки постоянно , т.е.   если у вас   есть текст на странице - то он хранится во всех поисковиках,  избыточность   хранения просто ,а то что  поисковые серверы используют рейды меня вообще пугает, по ощущениям  у нас винты покупаются в мире 50 на 50 - всеми пользователями и несколькими поисковыми компаниями ( добавлю к ним  ютуб и контакт например)
дальше  - у гугла нет вариантов работать быстро кроме самообучения и повторения
как ни странно букв  у нас  всего 33 , и  вы представьте - гугл взял всю  инфу инета  засунул себе в "память" сортировал, считал  всё месяц, но к моменту когда вы  посылаете запрос   - буква О - он успел посчитать что это  пол миллиарда  упоминаний  - и выдал вам  готовый ответ
и как ни странно  слов и словочетаний в принципе не много, настолько немного что  можно  дажи отдать часть ресурсов на слова  с ошибками  например
и именно популярные списки есть  та самая тайна )) скорее всего вы наберете  словно  порно, гугл каждый день выдает сотни тысяч подборок к этому слову - оно у него в самом удобном месте оперативной памяти на серверах всех языков ))))
и поверьте 99,999% ваших глупых вопросов гугл уже обрабатывал долгими зимними вечерами )))  гугл как бы отдает 90% своей мощности на  учебную тревогу постоянно ища  инфу в своих хранилищах - оптимизируя и готовя ответы заранее )))
в общем  с помощью кучи денег, гениальных алгоритмов все возможно
а предугадывание это  вообще  кульный развод  - вы  начали набирать слово  - а это целые секунды до нажатия кнопки поиск
удачи  всем ))


Название: Re: Google
Отправлено: metalim от Апрель 02, 2010, 01:58:48
Ребят, вы б, прежде чем умничать и глупые догадки строить, поискали в том же гугле и википедии, а?

http://en.wikipedia.org/wiki/Google_platform

Никаких суперкомпьютеров там нет. Основной критерий выбора железа - производительность на доллар. Доллар здесь - как покупка железа, так и его энергообеспечение (которое в перспективе больше цены самого железа). Поэтому все сервера - вполне обычные компы: от celeron-ов до core i7. Думаю они даже на серверные процы (всякие Xeon-ы) не тратятся, т.к. там железо в разы дороже без какого-либо существенного выигрыша в производительности.

А скорость поиска достигается во-первых индексацией (представьте себе обыкновенный словарь - найти любое слово в нём ведь труда не составляет?), во-вторых огромным количеством этих серверов. В 2000 году их было 6 тысяч, в 2006 году - уже 450 тысяч. Сколько сейчас - остаётся только догадываться. Где-то я слышал цифру в 2 миллиона. Состав постоянно пополняется.

В обработке наших запросов косвенно участвует сразу куча серверов.
Один сервер думает у кого про что спрашивать, собирает ответы и считает их релевантность;
Другие ищут у себя номера документов, в которых искомые слова упоминаются и говорят сколько таких нашли (так что цифры "Результаты 1 - 10 из примерно 240 000 000" вполне реальные, а не с потолка взятые);
Третьи выдают сами документы (тот самый десяток, а не 240 миллионов);
Четвёртые запоминают наиболее частые вопросы и найденные ответы, чтобы не искать всё заново;
И т.д., и т.п.

Ну и разумеется при обработке вашего запроса гугл не лезет на чужие сайты и не ищет там слова из вашего запроса. Всё уже есть у него в индексах. А информация обновляется быстро, потому что серверов, которые прочёсывают интернет на предмет обновления (Web crawler-ы, spider-ы или харвестеры), тоже дикое количество. Частота проверки конкретного сайта зависит от истории его обновления. Если предыдущие проверки показали, что сайт не обновляется, частота проверок постепенно снижается с минут до часов/дней.

Так что всё там шоколадно, и никто не рвёт пупок листая интернет в поисках вашего вопроса и не передаёт терабайты данных на каждый запрос. :)