Если строки — исходящие взаимодействия, активность равна сумме строки, популярность — сумме столбца. В приведённой матрице оба максимума принадлежат Charlie.
1. Есть социальная сеть:
Если строки — исходящие взаимодействия, активность равна сумме строки, популярность — сумме столбца. В приведённой матрице оба максимума принадлежат Charlie.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
-
Есть социальная сеть:
- Пользователи - вершина графа
- Возможность взаимодействия (дружность) с другими пользователями (лайк, комментарий, сообщение, репост) = ребро
- Связи взаимные (например, количество взаимодействий) = вес ребра
-
Задачи:
- Найти самого активного пользователя
- Найти самого популярного пользователя
import numpy as np
shape = (n, n)
adjacency shape = (n, n)
example = np.array([ [0, 8, 3, 0, 2], # Alice [2, 0, 10, 0, 0], # Bob [4, 2, 0, 7, 1], # Charlie [0, 0, 6, 0, 0], # John [3, 1, 2, 0, 0], # Enea ])
Ответ
Если строки — исходящие взаимодействия, активность равна сумме строки, популярность — сумме столбца. В приведённой матрице оба максимума принадлежат Charlie.
Матрица несимметрична, хотя условие говорит о взаимных связях. Поэтому сначала зафиксируем направленную интерпретацию: A[i, j] — действия пользователя i в отношении j.
names = np.array(['Alice', 'Bob', 'Charlie', 'John', 'Enea'])
activity = example.sum(axis=1) # [13, 12, 14, 6, 6]
popularity = example.sum(axis=0) # [9, 11, 21, 7, 3]
print(names[activity.argmax()])
print(names[popularity.argmax()])
При равенстве argmax выбирает первый максимум. Если популярность означает число разных взаимодействующих людей, считайте ненулевые элементы, а не веса. Для действительно неориентированной симметричной матрицы суммы строк и столбцов совпадают, поэтому эти метрики перестают различаться.