Имам база данни от 20 милиона потребители и връзки между тези хора. Как мога да докажа концепцията за концепцията "Шест степени на разделяне" по най-ефективния начин в програмирането?
Как мога програмно да докажа концепцията за шестте степени на разделяне?
Отговори (4)
Просто искате да измерите диаметъра на графиката. Това е точно показателят, за да откриете разделението между най-отдалечените свързани възли в графика.
Много алгоритми в Google, Boost graph също .
Вероятно можете да поберете графиката в паметта (в представянето, че всеки връх знае списък от своите съседи).
След това, от всеки връх n, можете да стартирате търсене в ширина (с помощта на опашка) до дълбочина 6 и да преброите броя на посетените върхове. Ако не всички върхове са посетени, вие сте опровергали теоремата. В друг случай продължете със следващия връх n.
Това е O(N*(N + #edges)) = N*(N + N*100) = 100N^2, ако потребителят има средно 100 връзки, което не е идеално за N=20 милиона. Чудя се дали споменатите библиотеки могат да изчислят диаметъра с по-добра времева сложност (общият алгоритъм е O(N^3)).
Изчисленията за отделните върхове са независими, така че могат да се правят паралелно.
Малка евристика: започнете с върхове, които имат най-ниска степен (по-добър шанс да опровергаете теоремата).
Мисля, че най-ефективният начин (в най-лошия случай) е почти N^3. Изградете матрица на съседство и след това вземете тази матрица ^2, ^3, ^4, ^5 и ^6. Потърсете всички записи в графиката, които са 0 за матрица до матрица^6.
Евристично можете да опитате да отделите подграфи (големи групи от хора, които са свързани с други групи само чрез сравнително малък брой "мостови" възли), но няма абсолютно никаква гаранция, че ще имате такива.
Е, вече беше даден по-добър отговор, но от главата ми щях да избера Floyd-Warshall всички двойки алгоритъм за най-кратък път, който е O(n^3). Не съм сигурен в сложността на алгоритъма за диаметър на графиката, но "звучи", сякаш това също ще бъде O(n^3). Бих искал разяснение по този въпрос, ако някой знае.
От друга страна, наистина ли имате такава база данни? Страшен.