Устойчивое сопоставление предпочтений
Привлекательный отдельный выбор может оставить пару желающих поменяться. PairCrest — Windows-среда работы с кодом для изучения алгоритмов предпочтений на явных примерах и с проверяемыми правками, а не утверждений о реальных людях.
from collections import deque
def stable_pairs(proposers, receivers):
if type(proposers) not in (list, tuple) or type(receivers) not in (list, tuple):
raise ValueError("preference tables must be lists or tuples")
n = len(proposers)
if n > 20 or len(receivers) != n: raise ValueError("equal sizes up to 20")
for rows in (proposers, receivers):
for row in rows:
if type(row) not in (list, tuple) or len(row) != n or any(type(v) is not int for v in row) or set(row) != set(range(n)):
raise ValueError("complete strict preferences")
ranks = [{v:i for i,v in enumerate(row)} for row in receivers]
free, next_choice = deque(range(n)), [0]*n
owner, partner = [None]*n, [None]*n
while free:
p = free.popleft()
r = proposers[p][next_choice[p]]
next_choice[p] += 1
old = owner[r]
if old is None or ranks[r][p] < ranks[r][old]:
owner[r], partner[p] = p, r
if old is not None: partner[old] = None; free.append(old)
else: free.append(p)
return partner- Подключение
- Базовый URL, учётные данные и доступный сервер.
- Проект
- Проверьте пустые группы и конкурирующий выбор, отклоняя повторы и пропуски и убеждаясь в отсутствии блокирующей пары.
- Проверьте перед применением
- Сравните фактическое поведение с ожидаемым. Если проверка не проходит, разберитесь в причине перед следующими изменениями.
from collections import deque
def stable_pairs(proposers, receivers):
if type(proposers) not in (list, tuple) or type(receivers) not in (list, tuple):
raise ValueError("preference tables must be lists or tuples")
n = len(proposers)
if n > 20 or len(receivers) != n: raise ValueError("equal sizes up to 20")
for rows in (proposers, receivers):
for row in rows:
if type(row) not in (list, tuple) or len(row) != n or any(type(v) is not int for v in row) or set(row) != set(range(n)):
raise ValueError("complete strict preferences")
ranks = [{v:i for i,v in enumerate(row)} for row in receivers]
free, next_choice = deque(range(n)), [0]*n
owner, partner = [None]*n, [None]*n
while free:
p = free.popleft()
r = proposers[p][next_choice[p]]
next_choice[p] += 1
old = owner[r]
if old is None or ranks[r][p] < ranks[r][old]:
owner[r], partner[p] = p, r
if old is not None: partner[old] = None; free.append(old)
else: free.append(p)
return partnerУточните требования к назначениям до изменения кода
Функции назначения нужен не просто список пар: необходимо чётко определить допустимые входные данные и критерии приемлемого результата. PairCrest предоставляет среду программирования с ИИ для Windows, где можно обсуждать эти требования вместе с соответствующими файлами проекта. Начните с предпочтений, получаемых приложением, и ограничений, которые оно должно соблюдать, затем попросите проверить текущую реализацию.
Пример устойчивого сопоставления предпочтений показывает одну возможную задачу разработки. Можно проверить валидацию полных ранжирований, представление ещё не сопоставленных участников в процессе обработки и передачу итоговых пар вызывающему коду. Если требования включают равные предпочтения, пропущенные предпочтения или группы разного размера, обозначьте это несоответствие до запроса адаптации. Более узкие предпосылки примера должны оставаться явными в ходе обсуждения, а не превращаться в скрытые правила приложения.
Модель ИИ без цензуры можно выбрать через поддерживаемую конечную точку, совместимую с OpenAI или Anthropic, с учётными данными, если они требуются. Модель и сервер определяют контекст, инструменты и ограничения. Проверьте предлагаемые проверки входных данных и обработку результатов, затем протестируйте небольшие таблицы предпочтений с результатами, которые можно изучить. Отдельный локальный сервер модели обеспечивает только инференс; другие инструменты могут по-прежнему подключаться к внешним сервисам.
Уточнение функции на основе предпочтений
Как выглядит полезное требование к назначению?
Опишите группы, допустимые формы предпочтений и свойство, которому должно удовлетворять итоговое назначение. Приведите небольшой пример, который можно проверить вручную. Избегайте широких слов вроде «лучший», не объяснив, как приложение должно оценивать результат.
Можно ли добавить равные предпочтения без изменения остального контракта?
Не следует этого предполагать. Пример ожидает полные строгие предпочтения. Равенство предпочтений может изменить и представление входных данных, и смысл приемлемого результата. Явно запросите эти решения до проверки предлагаемого алгоритма или изменения вызывающего кода.
Как проверить результат без большого тестового набора данных?
Начните с небольших таблиц предпочтений и проверьте полученные пары на соответствие заявленному свойству. Добавьте недопустимые ранжирования для проверки отказа. Эти целевые случаи помогают проверке, а собственный набор тестов приложения должен охватывать более широкие требования к входным данным и интеграции.
Решает ли PairCrest, что справедливо для пользователей?
Программная среда не определяет вашу политику распределения. Вы задаёте требования и оцениваете их последствия. Попросите помощника объяснить предпосылки реализации, затем проверьте, соответствуют ли они правилам, которые должно применять приложение.
PairCrest · Обновлено 2026-10-25