Я новичок в python кодировании и пытаюсь выяснить, как проверить стабильность алгоритма Гейла-Шепли. Я понимаю, что для создания стабильного соединения это означает, что нет ситуации, когда 2 человека предпочитают друг друга своему назначенному партнеру.
Данные предпочтений участников следующие:
preference = [["boy1",1,3,2,4], ["boy2",1,2,4,3],["boy3",1,2,3,4],["boy4",2,3,1,4],["girl1",2,1,3,4],["girl2",4,3,2,1],["girl3",1,2,3,4],["girl4",3,4,2,1]]
Например, для предпочтения [0] рейтинг boy1 для girl1 равен 1, girl2 равен 3, girl3 равен 2, girl 4 означает 4. Это означает, что список идет следующим образом: ["boy1", (рейтинг girl1), (рейтинг girl2), (рейтинг girl3), (рейтинг girl 4)].
Пример решения спаривания выглядит следующим образом:
solution1 = [["boy1","girl1"],["boy2","girl3"],["boy3","girl2"],["boy4","girl4"]
Я пытаюсь найти функцию, которая выдает истину, если решение стабильно, и ложь, если решение нестабильно, учитывая предпочтение, решение и количество пар.
Я пытался использовать pandas и numpy, но я продолжаю зацикливаться на многих циклах for, а также проблемах с индексацией и проблемах с индексированием, поскольку я не очень знаком с любым из них python библиотек. Я сейчас пытаюсь go вернуться к основанию c и посмотреть, возможно ли это сделать. Однако, когда я это делаю, я понимаю, что продолжаю использовать циклы for, и это будет не так эффективно. Ниже приведен мой неполный код, пожалуйста, посоветуйте, что мне следует сделать, чтобы повысить эффективность этого неполного кода - и, если возможно, выполнить мой текущий неполный код после его завершения. Пожалуйста, предложите любые библиотеки python, которые я тоже могу использовать, любые предложения очень приветствуются!
def teststability(n, preference, solution):
for i in solution[i]:
fpo = solution[i][1][1]
for j in preference[j]:
if solution[i][0] == preference[j][0]:
rank = preference[j][fpo]
if rank == 1:
continue
else:
for k in pref[j][k]:
if pref[j][k] < rank:
lst.append("girl"+str(k))
else:
continue