Очередная попытка доказать что мир тесен

Все уже наслышаны о теориях шести рукопожатий и им подобных. Наслушавшись таких, я рашил написать небольшой userjs к опере, (сырой, пока не выкладываю), который сохраняет данные с тех страницы сайта vkontakte.ru, на которых я побывал, а именно списки друзей. Вся информация аккуратно складывается в mysql-базу в формате id—id друга—Имя друга. Сидел в контакте после этого я около 10 часов, залезая на страницы друзей, и не только. Выяснил, что я знаком с Павлом Дуровым через 6 рукопожатий. (если кому интересно, был нарисован корявый, но граф цепочки знакомств).
Каждую из страничек я посещал лично. Никаких граберов, парсеров, автоматов я не писал!
Итак, в целях продолжить эксперимент, я предлагаю:
Несколько хабрадобровольцев могут в коментах оставить свои id профиля вконтакте. Требование — список друзей должен быть открыт. Я пытаюсь за сутки нарисовать цепочку знакомств до Павла Дурова и до меня.
UPD:
Zivaka, id288968 (в скобках id):
Дмитрий Zivaka Мамаев (288968) — Евгений <!--glazs--> Глазырин (474078) — Леонид Калентьев(424064) — Алексей Alex Юманов(9650028) [в одной общаге с ним жили] — Дамир ainu Фахрутдинов (2416637)[Я]
И:
Дмитрий Zivaka Мамаев (288968) — Евгений <!--glazs--> Глазырин (474078) — Леонид Калентьев(424064) — Роман ФотоГраф Хасаев(4459542)—Амир [Herr Mad] Иванов(2315639) [коллега бывший] — Дамир ainu Фахрутдинов (2416637)[Я]
Остальные апдейты под катом

UPD2:
bishop3000, id3624179:
Олег bishop Федоров(3624179) — Алексей Xor Сухоручко(782864) — Анна Черных(202063) — Александр Викторович Беспалов(17) — Павел Дуров(1)
4 Рукопожатия до Дурова, до меня соответственно 8 (Анна Черных(202063) и Митенька Миронов (70) имеют несколько общих знакомых, а последний изображён на графе)
UPD3:Довольно сложно найти связи от людей, закрывших списки друзей, либо ливущих в Украине, Белоруссии и т.д. Извините. Семь людей я нашёл. Эксперимент полагаю считать удавшимся. Но не законченным=)
UPD4:Kolger, id210630
Никита Смирнов(210630) — Елена А. Попова(49838) — Надя Петрова(3461) — Митенька Миронов(70)—Александр Викторович Беспалов(17) — Павел Дуров (1)
UPD5:Taxup,id1516701
Тахир ARES.KZ™ Биккинин (1516701) — Максим Фридрикин(249136) — Андрей Любимов(61983) — Роман *RomaNTIC* Акамёлков(219) — Павел Дуров (1)
UPD:VasilioRuzanni, id427647
Vasilio 'El Nino' Ruzanni (427647) — Татьяна Tanni Real Ma Юнкина(148457) — Татьяна Плуталова(34) — Павел Дуров(1)
Благодаря Vasilio 'El Nino' Ruzanni обнаружился баг в скрипте (кавычки в нике + кривоватый SQL запрос = ошибка)

lifeforweb, id575175
Игорь Гусаров(575175) — Тарас Куторов(604746)—Вениамин Мельцев(128195) — Илья (НашРок-Питер) Сакмаров(94759) — Светлана Климичева(822)—Ася Щёголь(254) — Павел Дуров(1)
UPD:
Знающим и умеющим людям — просьба! Подскажите с решением задачи:
Итак, задача: Имеем граф. Задаётся в виде таблицы: Id, Id друга, имя друга.
Необходимо найти кратчайший путь между вершинами графа, отстоящими друг от друга на более чем 5 рёбер.
Ограничения: база в MySQL, база большая, соответственно сливать её всю в массив нельзя. Но возможно получить список друзей человека. Получения списка друзей второго круга занимает от одной до 5 секунд. Соответственно количество запросов и время выполнения ограничено (допустим, время выполнения скрипта — 20 секунд). Среда: php5.
Мною было найдено решение с 4 рёбрами, путём загрузки списков друзей второго круга, и их перебором между собой.
В таблице friends 4 столбца: id, myid, frid, name. 1 поле ключевое, второе id человека, третье id друга.
Кусок дампа тут. Таблица должна называться не friends_copy, как в дампе, а friends.
Текущий алгорим поиска (только 4 рукопожатия): ramainen.ru/i/download/graf.php.txt
upd:
rozboris id738345
Борис Rozboris Розенштейн(738345) — Илья Петрович Разенштейн(721470)—Андрей Лопатин(11191) — Павел Дуров(1)
upd: Связь не с Дуровым и со мной (хотя она тоже есть), а между двумя хабрачеловеками:
tinkk id888570,
Rchee id241410
Сергей t1nkk… Пономаренко (888570) — Даша *without_me* Шевлякова(1221260) — Аня — Леди Лиса — Хурхулу(2379374) — Елизавета Likogra Кондакова(5064604) — Данила Леньков(896189) — Роман Кубасов(384539) — Максим Захаров(274521) — Art Loving myself Bandin(241410)
upd: kiroru id48437:
Кирилл Kiro Павлов(48437) — Евгений Андрианов(2108557)—Наргиз Narciss Кулизаде(967409) — Денис AIK Щетнёв(332306) — Эльвира *Рыжая_Вельха* Хабибулина(779335)—Диана Каюмова(6753283) — Дамир ainu Фахрутдинов (2416637) [Я]
И:
Кирилл Kiro Павлов(48437) — Евгений Андрианов(2108557)—Наргиз Narciss Кулизаде(967409) — Денис AIK Щетнёв(332306) — Эльвира *Рыжая_Вельха* Хабибулина(779335)—Александр «Erandill» Иевлев(3312) — Екатерина ledkit Фуртикова(54)—Татьяна Плуталова(34)—Павел Дуров (1)
upd:хабрачеловек Timon, id222737
Павел Дуров(1) — Александр Викторович Беспалов(17) — Анна Черных(202063) — Антон Прозоров(1188737) — Елизавета Гаврилова(114645)—Наталья Ульянкова(119648) — Татьяна Яикина(1072856) — Мария Чернышева(14335577) — Тимур Timurka Тазетдинов(222737)
upd: zemlanin id6821354
Антон zemlanin Веринов (6821354) — Алексей Woody Худоченков (5021145) — Галина Чешуинова (7327547) — Артур Арасланов (1562516) — Пулат Салихов(1178113) — Алия Исламова(4218480) — Дамир ainu Фахрутдинов(2416637)[Я]
И:
Антон zemlanin Веринов (6821354) — Алексей Woody Худоченков (5021145) — Галина Чешуинова (7327547) — Артур Арасланов (1562516) — Анастасия Юрина(160885) — Раиль Замалетдинов(676776) — Дамир ainu Фахрутдинов(2416637)[Я]
UPD:
Прошу прощения, если кого-то пропустил! Просьб было много, Некоторые закрыли списки друзей, некоторых найти не получилось. Итак, Граф:

Выделены хабралюди, я и Павел Дуров.
+110
10 сентября 2008, 21:16
16
ainu 111,6

комментарии (185)

+2
ainu #
Добровольцев нет? Или в контакте никто не сидит?
–9
Ex3NDR #
а у меня всего два рукопожатия))))
0
torVALd #
а меня можно потестить?
id7848
+4
romy4 #
клёва, заходите, тестьте: id3710341
ещё бы, если можно, выложите свой JS-ник, хотелось бы его к ФФ прикрутить-погонять. :)
+2
ainu #
Принято, спасибо, начинаем эксперимент!
–2
romy4 #
ах да, вылетело из головы про закрытые списки, давайте добавлю вас в друзья
а вы не хотите, чтобы ещё каждый сам по эксперементировал?
0
paly4 #
кстати, может под хабракат?
+1
Zivaka #
id288968 — интересно :)
вообще пару месяцев назад у меня с Дуровым был общий друг, потом он удалился из контакта…
+1
ainu #
Готово=) см. Апдейт в посте=) До Дурова не довёл, но доведу обязательно, а вот нас с Вами разделяет 4 рукопожатия. Кстати, до Дурова — уже есть цепочка, но длинноватая, через 10 рукопожатий. Сраните с графом.
+1
Zivaka #
Если я не ошибаюсь, то до Дурова у мну 3 или 4 рукопожатия.
Прикольно, так как мы с Женей Глазыриным (474078) работали вместе, а Леонид Калентьев также работал когда то в той компании :)
+2
ainu #
Если порыть глубже, я уверен, есть и более короткие цепочки. Просто сроки у меня сжатые)
+2
bishop3000 #
А почему без автоматического скрипта? Ведь вроде несложно его написать.
Мой: id3624179
+2
ainu #
Я в курсе. Но это не есть хорошо, такие вещи писать. За это и забанить могут.
+4
bishop3000 #
Забанить? У них вроде правило — не чаще раза в секунду заходить на новую страницу. Если скрипт будет это правило выполнять — разве забанят?
Можно в техподдержку написать — спросить :)
+2
ainu #
Готово) 4 «рукопожатия» до Дурова.
–3
bishop3000 #
Ого! А путь?
–3
bishop3000 #
А, всё, нашел, что вы его в пост запихали
+2
anka #
и меня, пожайлуста:) id6798242
0
ainu #
Анка Partyzanka Заика(6798242) — Ксения Кондрашова(7855546) — Леся ॐ Pyromancy(1635334) — Сергей Алхимик Невзоров(5046973) — Александр Conqueror Ярошенко(6931374) — Андрей Лопатин(11191) — Павел Дуров(1)
Анка Partyzanka Заика(6798242) — Коля Наумов(11182297) — Persona Grata(4822233) — Максим Чеботаев(11146947) — Александр «SAleX» Сидоров(62691) — Андрей Лопатин(11191) — Павел Дуров(1)
0
anka #
Таки с Украиной связь есть:)
+2
kiroru #
а меня можно еще id48437
0
ainu #
Готово… Ко мне Вы ближе, чем к Дурову. По имеющимся связям.
+3
MindiveR #
«Шесть рукопожатий» действуют не всегда. Но мир и правда тесен: не раз убеждался и сам, что среди знакомых моих знакомых находится люди множества умений и профессий.

Только «контакт» не лучший выбор для опытов, нередко «в друзья» добавляют людей, вообще их не зная. Вот для теста очередного скрипта, повышения программерского скилла или составления списка пользователей (а вот с последним будьте аккуратнее, можно попасть) — это можно ;)

з.ы. если не трудно, id674210 :)
+2
ainu #
Никаких списков пользователй я не собираю, и граберов не пишу. Только 2-й круг, плюс цепочки до нескольких людей, таких как Дуров.
0
ainu #
Ваш список друзей закрыт, извините.
+2
kiroru #
и ооочень хотелось бы потестить скриптик. Думаю самому написать, но зачем делать одно и тоже, предлагаю вам посильную помощь…
+2
ainu #
Помощь нужна от людей, понимающих, что такое графы и оптимизация, нахождение кратчайших путей.
0
kiroru #
нет, я больше по программированию готов помочь.
+1
bishop3000 #
Кстати, я — программист игр бывший, на поиске путей собаку съел. С удовольствием помогу :)
+2
leave #
Дейкстра — лучший друг? ;)
0
bishop3000 #
Не лучший, но пару алгоритмов подкинул :)
+1
quark #
id7379963
0
ainu #
Извините, не вышло
+1
antyrat #
id5958359
0
ainu #
Извините, не получилось. Львов — это далеко.
0
kuzya555 #
id7490373 :)
0
ainu #
Иван Громов(7490373) — Александр dant1st Горбатов(1958232) — Андрей Лопатин(11191) — Павел Дуров(1)
0
Lukin #
id633454
+2
GreenAngel #
Начинание интересное и полезное.
Полезное в том, что поднимает людям настроение и сообщает им полезную информацию.

Но нет необходимости пытаться доказать аксиому)
+1
Kolger #
Отличный эксперемент! Тоже недавно ломал голову над таким, но к действиям так и не перешел :)
0
Kolger #
id210630
+1
ainu #
Готово) См. апдейт поста.
0
to_Okie #
id399912
зы надеюсь опровергну вашу гипотезу)
0
ainu #
Извините, список друзей закрыт
+2
Razdelim_com #
Хороший топик- и главное все остались довольны- и автор и комментаторы, судя по плюсам.
Вот все бы темы так гармонично шли!
0
Taxup #
id1516701
буду благодарен)
0
ainu #
Готово. 4 рукопожатия
0
Taxup #
фигасе… не ожидал… рахмат)
0
Xelaan #
id2856612
Очень сомневаюсь, но вдруг…
P.S. Заранее спасибо :)
0
ainu #
Александр Наймушин(2856612) — Михаил ]netmisch[ Черных(1479019) — Дмитрий Гозман(1718621) — Андрей Лопатин(11191) — Павел Дуров(1)
Александр Наймушин(2856612) — Алексей Склёмин(4265315) — Наташа Minority Дрыганец(1230612) — Мария Павленко(7543286) — Андрей Лопатин(11191) — Павел Дуров(1)
0
Ranedo #
id5355398
0
ainu #
Список друзей закрыт
0
Lex85 #
id5491025
0
ainu #
Хмм… Не вышло, извините.
0
Lex85 #
наверное у меня маловато знакомых((
0
tinkk #
id888570 Если до меня дело дойдёт :)
0
ainu #
И до Вас дело дошло :)
Нашлась связь между Вами и Rchee (id241410).
Хоть что-то.
0
ainu #
Эльвира *Рыжая_Вельха* Хабибулина (можно найти на графе) — Павел Тутубалин — Игорь Hellsing666 Рыбаков — Елизавета Likogra Кондакова — Аня — Леди Лиса — Хурхулу — Даша *without_me* Шевлякова — Сергей t1nkk… Пономаренко
Извините за отсутствие id номеров, времени в обрез, да и бета сырая=)
Смоделировано алгоритмом номер 2, спасибо хабрачеловеку eigrad. Думало 300 секунд.
ОДнако сам факт нахождения цепочки длиной в 9 рукопожатий предполагает возможность создания универсально публичного (вернее, персонального для каждого) скрипта поиска.
0
rozboris #
id738345

Попробуйте — у меня достаточно узкий круг друзей(правда, есть среди них и рекордсмены в 500+ френдов)
0
ainu #
Получилось, всего три рукопожатия. (см. апдейт)
0
rozboris #
Ничего себе! Спасибо за исследование, интересно. Жалко, что это всё-таки «не по правилам» и нельзя нарисовать ОченьБольшойГраф всех пользователей(читай, нельзя сливать всю базу)
0
TheShade #
Больше года назад этой же идеей загорелся. Правда, визуализатора у меня нет — но можно написать тривиальный транслятор под GraphViz.
shipilev.livejournal.com/26555.html#cutid1
0
burgua #
id872527

Идея понравилась.
А curl не пытался использовать?
Может и ходить не придется )
0
ainu #
Нет. Всё по-честному. Всё на клиенте.
Извините, Ваш список друзей закрыт.
0
mberkut #
И меня, и меня тоже :)
id253875
+1
ainu #
Бектур Мамбетов(253875) — Александр Коломиец(238989) — Света Буйнова(3368) — Полина Богуш(334) — Павел Дуров(1)
0
MVM #
Если не сложно..) id6181
спасибо)).
+1
ainu #
Максим Матвеев(6181) — Сергей Тимошенко(1839656) — Александр «SAleX» Сидоров(62691) — Андрей Лопатин(11191) — Павел Дуров(1)
Максим Матвеев(6181) — Инна Степанова(9451) — Светлана Климичева(822) — Анастасия Желудкова(59) — Павел Дуров(1)
0
nrg3 #
А как насчёт такого же, но только уже на Хабре и его друзьях ?:) я думаю было б интересно.А так експеремент меня очень удивил, класно вышло :) спасибо за то, что изменили некоторые мои взгляды.
0
ainu #
Возмоно в том случае, если каждый с хабра (из желающих) даст свой id контакта. Сеть хабра намного меньше, и каждый не знаком с каждым. Наверное.
0
Suomi #
Ну чтож, попробуйте.
id829436
0
ainu #
Ваш список друзей закрыт
+1
Suomi #
Ой, извините, открыл.
+1
romy4 #
инетресно, сколько у кого новых друзей появилось теперь в контакте?
+2
mzaharenkov #
id175 — одно рукопожатие до Павла Дурова
0
maddogrts #
увидел маленький id решил посмотреть, и что вы думаете, у нас есть общие знакомые :))), тесный мир (Мария Воробьева)
0
putnik #
Хех. И у меня с вами тоже есть общие знакомые. =)
0
VasilioRuzanni #
Интересная тема)
id427647
+1
ainu #
Готово)
Благодаря Вам обнаружился баг в скрипте (кавычки в нике + кривоватый SQL запрос = ошибка)
0
VasilioRuzanni #
Ооо, пасиба! А баг с ником да, реально есть, у меня в настройках ВКонтакте, там где можно поменять ник, он не выводится полностью, а только первая кавычка и первое слово — видимо связано с этим же.
–5
DREAM1N #
id842053?25858
0
Spirit_Fenix #
интересно стало… только вот народу уже много. надеюсь не обойдете меня стороной)
id5776045
0
Devgru #
354639
спасибо, интересно :)
+4
keatlon #
вот статейка пробегала

www.techcrunch.com/2008/09/03/six-degrees-of-separation-is-now-three/

если вкратце — мир теснее, чем 6 рукопожатий. всего 3

0
steck #
Хм, странно.
У нас пусть около 7*109
если мы извлечем корень третьей степени, то получим число знакомых, которых минимально необходимо иметь для покрытия всего земного шара.
У меня получилось 1913 людей. Имхо это несколько больше, чем в среднем количество людей, с которыми нормально общается человек.
0
eigrad #
но вполне правдоподобно что с таким количеством людей мы производим хотябы одно рукопожатие за всю жизнь…
0
slovar2003 #
id1405401
0
Elected #
id6721642
0
Ingolmo #
id277926

интересно :)
0
mishenin #
id6949
Если будет время :)
НЛО прилетело и опубликовало эту надпись здесь
0
ZDN #
vkontakte.ru/id9477

Умираю от любопытства
0
maxk #
Мда… Хоть для что-то Вконтакте полезен…
0
brumdiboom #
ммм… а кто такой этот Павел Дуров?
намного интереснее узнать цепочку где я знаком с Гейтсом, Торвальдсом или Джобсом, например.
0
atreen #
moikrug.ru/ — социальная сеть, основанная на теории о 3 рукопожатиях.
А во вконтакте, да, порой нехватает видения «кругов».
0
tauron #
id404582
0
lifeforweb #
id575175
0
ainu #
Готово)
+1
lifeforweb #
Спс, пошел писать Тарасу (второй в цепочке) ;-)
0
Rchee #
id241410
0
ainu #
Хмм… Связь нашлась, но она длиннее, чем 6 человек. Если мне кто-нибудь поможет с алгоритмом, покажу.
0
ainu #
Есть путь в 7 рукопожатий до хабрчеловека tinkk (id888570).
Я уверен, есть пути покороче, но на их поиски необходимо время.
+1
n0s #
Ооо… имя «Дамир» знакомо. Это не тот, про которого на башорге писали?
цитата:
:) ща на форуме нашем человек зарегился, Дамир зовут. e-mail: yesworld@…
+1
EvilFaeton #
Можно не считать — два рукопожатия до ПВД.
Но, господи, смотрю на хабратопик, вижу знакомые имена/фамилии и втупляю не могу понять чего они на хабре делают. :))
0
VEG #
Классная тема :)
id4625479
+1
M_org #
id2551971.

На самом деле такую штуку бы — да вконтакт встроить. Жалкое подобие есть на одноклассниках — там максимум 3(?) «рукопожатия». С другой стороны, это приватность как-то нарушает…
0
Sabiko #
Жаль, вас уже так завалили заявками, вручную такой объём вряд ли возьмётесь обрабатывать, а палить вконтакт впустую не хочется. Всё же (надеяться не вредно): id23959.

Интересно, на фейсбуке подобного функционала нет?
0
ainu #
Как раз и вручную=) в свободное от работы время.
0
tuprikov #
id1562664
+2
glazs #
Я звезда! Я там два раза!
Смотрите, у меня никнейм в xml-комментарии!
0
igeek #
да, чувак, ты крут!
НЛО прилетело и опубликовало эту надпись здесь
0
Trave #
Если дадите структуру БД завтра-послезавтра могу набросать скриптик для поиска кратчайшего пути в графе.
0
ainu #
Слил slil.ru/26134283 кусок таблицы (но она должна называться не friends_copy, как в дампе, а friends)
+1
Trave #
На сколько я разбираюсь в БД то вам крайне желательно удалить ключевое поле(зачем оно?) и создать индекс по myid. так же name можно вынести в отдельную таблицу чтоб не было дублирующихся данных и таблица связей работала быстрей.

мой скриптик:
протестировал на 4000000 базе с рандомными значениями. цепочку глубиной в 10 и общим количеством участников ~350 прошло за 0.07 секунды на моем сервере.
Количество запросов к БД = количеству просматриваемых уровней.
Если не заработает буду рад разобраться и помочь. критика, вопросы, советы — велком!
0
ainu #
myid и frid повторяются, нельзя их делать ключевыми.
А насчёт name — это правильно, спасибо. Небольшой минус в том, что просто при просмотре страницы контакта проводится запись в базу, и на страницах размером в 500 контактов чувствуются ощутимые тормоза. При таком подходе они удвоятся.
А скриптик сейчас посмотрим, спасибо.
0
Trave #
я и не предлагаю делать их ключевыми, я предлагаю сделать индекс а ключей тут совсем не нужно. может конечно я ошибаюсь…
0
ainu #
Честно говоря, удивлён скоростью работы, спасибо!
Чудеса просто.
2-3 секунды на моей 200 000 базе.
Есть 2 пожелания, если сумеете реализовать (я тоже попробую, надеюсь, сумею сделать, не испортив скорости).
1. Список друзей человека это не только все frid одного myid, но и все myid одного frid. Это важно, например, чтобы друзей Дурова находить (а список его друзей закрыт, например, 888570->1 работает на «ура», а наоборот, 1->888570 вылетает с предупреждением о пустом результате (mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\priem\www\graf3.0.php on line 83).
2. Надо уметь закрывать пути через определённых людей, запрещая их.
0
ainu #
1-й пункт сделал сам.
0
Trave #
второй пункт не понял что вы имеете в виду. привидите пример.
2-3 секунды это очень много на такой базе(или цепочка была очень длинная?). сделайте индекс на frid и myid и вынесете имя в отдельную таблицу — уверен скорость увеличиться в разы. добавление новых записей будет немного медленне, но если у вас не граббер который делает это в режиме постоянного сканирования, то вы этого не ощутите.
0
ainu #
2-й тоже. Вероятно, кривовато, но на скорости сказывается слабо:
После загрузки списка друзей,
for($i=0;$i<=count($zapret)-1;$i++)
{
unset ($friends[$zapret[$i]]);
}
0
Trave #
foreach($zapret as $key) {
unset ($friends[$key]);
}
0
uzurpator #
а я через одного друга знаком
id1019587
0
neon4ig #
id2415323
0
ainu #
Закрыт список друзей и страница. Извиняйте.
0
Timon #
Готов стать добровольцем :)

id222737
+1
ainu #
Готово. Правда, только 8 шагов.
0
Timon #
Спасибо.
0
ainu #
Альтернатива
Тимур Timurka Тазетдинов(222737) — Мария Чернышева(14335577) — Татьяна Яикина(1072856) — Наталья Ульянкова(119648) — Андрей Gottfried Белоус(696) — Анастасия Желудкова(59) — Павел Дуров(1)
0
vadimz #
Готов вступить в ряды. id5415769
+1
chip #
Надо скрипт в общее использование, с веб-интерфейсом, вводишь id от кого, и id до кого, скрипт считает и выводит граф) красота была б)
0
ainu #
Будет алгоритм — будет и скрипт.
0
ainu #
Вот текущий алгоритм (только 4 рукопожатия): ramainen.ru/i/download/graf.php.txt
0
Barefoot #
очень круто!
id1795320
0
timmy #
так даже есть такая соц сеть: 7ruk.ru
+3
DobroeZlo #
а кто такой Павел Дуров? о_О
0
DobroeZlo #
anyway 71428
0
DobroeZlo #
ошибся
id3549759
+2
ainu #
Самая последняя ссылка (внизу любой страницы контакта)
0
DobroeZlo #
хехехе… не знал =)
0
Alder #
добровольцы++ :)
id3981543
0
alias #
Поставьте апдейты под хабракат, чтоли…
0
ainu #
Готово, виноват, просто не ожидал, что выйдет хотя-бы с двумя людьми.
0
vat #
id2245179
:)
+1
eigrad #
Поиск пути на невзвешанном графе в 20млн вершин эт простой поиск волной:

N вершин (N < 20 млн. — допустим у нас стока народу вконтакте)

Есть очередь вершин в которые мы собираемся идти и массив из N элементов где отмечаем в каких вершинах были. Изначально массив забит нулями, единицей отмечена только начальная вершина, а в очереди только начальная вершина.

На каждом шаге берем одну вершину из очереди, добавляем ее детей в которых еще небыли и пишем единички в элементах массива им соответствующих. Заодно сравниваем с номером конечной вершины. Можем в массив вместо единичек писать расстояние до начальной (что обычно и делается). Можно в дополнительный массив писать данные для трассировки — номер вершины из которой мы пришли.

Массив из 20млн. байт — 20 МБ. Очередь (каждая вершина побывает в очереди <= 1 раза) <= 20Мб…

Помоему работает за t(N)…

Собственно всё…
0
eigrad #
Кстати предположив что у каждого примерно по 100-200 друзей и с каждым из них от 10 до 50 общих друзей можно оценить диаметр нашего графа… Только, извините, мне лень)))
0
eigrad #
0
ainu #
Андрей GrAd Григорьев(1174706) — Витя «Царь_Овощей» Кудрявцев(31839) — Вячеслав Евгеньевич _S Швед(1693471) — Андрей Лопатин(11191) — Павел Дуров(1)
0
ainu #
Идея, безусловно, красивая, да вот на практик уж очень туго работает. Долго.
Каждое t (которых N) делает запрос к базе данных. К приличной базе данных.
+1
eigrad #
Можно распараллелить и запросы к базе данных слать заранее (например при добавлении друзей в очередь)
0
eigrad #
Еще сам запрос продумать… Можно сразу друзей второго круга например получать одной транзакцией… 5 секунд это если одним запросом? или несколькими?
0
ainu #
5 секунд это максимум, при заторможенной системе. В среднем около 0.4 — 0.1 секунды идёт, иногда быстрее.
SELECT * from where id in (select ...) очень долго работает, такчто отпадает сразу.
Параллелить php не умею. Скрипт очень долгоо работал, выход нашёлся в модифицировании проверки искомого человека.
Проверяется не с искомыы человеком, а последовательно со списком его друзей.
Связи через 9-х человек ищет на ура, в этом Вам огромное спасибо. Более длинные цепочки не укладываются в 400 секунд.
Такое время выполнения и не позволяет селать скрипт публичным.
Так что скоро просто выложу сам скрипт поиска, у каждого своя персональная маленькая база будет.
Ну и соответственно, их объединять можно будет между пользователями в единую базу.
0
eigrad #
Вернее просто при добавлении друзей в очередь получать список их друзей (для каждого друга) одним запросом…
НЛО прилетело и опубликовало эту надпись здесь
0
ainu #
Учтите, список его друзей закрыт. Но (!) он открыт у его друзей. Так что первоначальные 5 человек его первого круга пришлось искать «на шару». Их можно по пальцам пересчитать. Перечислите 20 друзей Павла Дурова — сниму шляпу)
НЛО прилетело и опубликовало эту надпись здесь
–2
Jaco #
id39525
0
ainu #
Виктор Новосельцев(39525) — Владимир Марченко(39643) — Андрей Дельфин Лысиков(3028766) — Эээ www.ED-WIN.com Altergott(99295) — Иван Говнов(4289) — Александр Викторович Беспалов(17) — Павел Дуров(1)
–2
Captcha #
Ну хоть на что-то вконтакт сгодится.
0
GKelpi #
Ну вот, значит скоро спамеры соберут id и заспамят всех)))
Сомнительная затея, т.к. у id № 1 друзей многовато.
0
ainu #
Перечислите 10-х? Они закрыты, смотрите сами vkontakte.ru/friend.php? id=1
–2
EvilFaeton #
По ссылке 310 человек друзей ПВД. По моему вписывается в понятие многовато.
+1
ainu #
Значит вы друг второго круга. Я ничего не вижу и ничего не могу с этим поделать.
0
EvilFaeton #
А, черт, вы правы не принял это во внимание. =/
0
EvilFaeton #
Кстати, сей сайт видели: vkontakte.net.ru/
На заре контакта его сделали, не знаю ли он функционирует в полной мере в данный момент.
0
ainu #
Он и был вдохновителем=) Красивая задумка и реализация, хотя и с багами.
0
GKelpi #
Они были закрыты не всегда, а потом Павел, это по сути техподдержка, а друзей у техподдержки всегда много.
Я говорю о фиктивности социальной связи типа «Друг», это сбивает теорию о рукопожатиях, при желании будет вам и два и одно рукопожатие.
0
leningradka #
давайте попробуем, интересно как именно:)
id881540
0
ainu #
У Вас список друзей закрыт(
0
madhat #
Dijkstra@Home? ;)

id10391770
–5
zemlanin #
А ну-ка, найди меня. 6821354
0
ainu #
Нашёл=) Не до Дурова, но до меня. До Дурова можете провести дорожку сами, по графу.
0
zemlanin #
Да мне до Дурова плевать:)
P.S. Мне кажется, что когда человек представляется ником, можно на «ты».
0
Entropius #
А если по-пробовать со мной? 791406
+1
ainu #
Александр Entropius Комков(791406) — Денис Бирюков(3900553) — Полина Кузовкова(910092)—
Дмитрий Гребенщиков(13834) — Roman POMEO~xfl~ Zhirnov(28339) — Maria Ignatina(64184) — Митенька Миронов(70) — Александр Викторович Беспалов(17) — Павел Дуров(1)

Александр Entropius Комков(791406) — Женько Dark_Veter Ветров(5481757) — Анастасия Сулакова(182630)—
Лариса Пчельникова(2676506) — Юния [тихо] Куковякина(1111870) — Дамир ainu Фахрутдинов(2416637)[Я]
+1
ainu #
Да, спасибо eigrad за алгоритм.
0
dnska #
И мне интересно :)) 107182
0
Richard_Ferlow #
У Дурова там друзей — немеряно :) Так что как там и водится, не факт, что он хотя бы половину знает =)
+1
ainu #
Прошу прощения, если кого-то пропустил! Просьб было много, некоторые закрыли списки друзей, некоторых найти не удалось. Итак, смотрим граф.
Всем спасибо. Подготавливается публичный (вернее, персональный) скрипт.
0
botnet #
классный скрипт! А когда ожидать релиз? Можно ли его сделать для firefox и оформить в виде скриптов на userscripts.org?
0
ainu #
Наверное, можно.
Трудность его в том, что к скрипту прилагается серверная часть, а это значит, что желающим его установить также понадобится денвер и минимальные знания MySQL по настройке этого скрипта.
0
zagir #
1022123 пожалуйста :)
0
hemper #
Дамир, вы бы не могли выложить куда-то алгоритм, а то топик уже старый и ссылки не работают, а мне очень интересно посмотреть реализацию.
Буду очень признателен, спасибо!
0
ainu #
уже нет, скрипт нерабочий, т.к. вконтакте смнили (и не раз) структуру внетренюю.
Логику работы могу сказать и так:
при просмотре страницы со списком друзей любого человека браузер с помощью UserJS (GreaseMonkey для ФФ) сохранял текущий список (отправляя через iframe на локальную страницу, обрабатываемую локлальным apache+php). Таким образом собиралась база.
Затем банальными sql запросами строились списки людей. Алгоритмы поиска в ширину по таким базам лучше искать самостоятельно, информация есть.
0
hemper #
Меня больше интересовал алгоритм, который был написан вами на php. Если он еще остался, был бы очень признателен за него. Со своей стороны обещаю указать ваше авторство даного алгоритма.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.