Постановка задачи:
У нас одинаковое количество мужчин и женщин. У каждого мужчины есть предпочтение по отношению к каждой женщине. Так же и женщина для каждого мужчины. У каждого из мужчин и женщин есть определенные интересы. На основе процентов, мы рассчитываем баллы предпочтений.
Итак, изначально у нас есть вход в файл с x
столбцами. Первый столбец - это идентификатор человека (мужчина / женщина). Идентификаторы - это только цифры от 0
... n
. (Первая половина - мужчины, а вторая половина - женщины). Остальные x-1
столбцы будут иметь свои интересы. Это тоже целые числа.
Теперь, используя эту матрицу n by x-1
, мы придумали матрицу n by n/2
. В новой матрице в столбцах указаны все мужчины и женщины, а для противоположного пола - столбцы.
Мы должны отсортировать оценки в порядке убывания, а также нам нужно знать идентификатор лица, связанного с оценками после сортировки.
Итак, я хотел использовать хеш-таблицу.
Как только мы получим оценки, нам нужно составить пары, для которых нам нужно следовать некоторым правилам.
Моя проблема со второй матрицей n by n/2
, которая должна дать информацию о том, какой мужчина / женщина имеет предпочтения относительно женщины / мужчины. Мне нужно, чтобы эти оценки были отсортированы так, чтобы я знал, кто является первой предпочтительной женщиной / мужчиной, вторым предпочтительным и так далее для мужчины / женщины.
Я надеюсь получить хорошие предложения по структурам данных, которые я использую. Я предпочитаю PHP или Perl.
Примечание:
Это не домашняя работа. Это немного модифицированная версия алгоритма стабильного брака. У меня есть рабочее решение. Я работаю только над оптимизацией моего кода.
Это очень похоже на проблему стабильного брака, но здесь нам нужно рассчитать баллы на основе интересов, которые они разделяют. Итак, я реализовал это так, как вы видите на вики-странице http://en.wikipedia.org/wiki/Stable_marriage_problem.
Моя проблема не решает проблему. Я решил и могу запустить. Я просто пытаюсь найти лучшее решение. Поэтому я прошу предложения о типе структуры данных для использования.
Концептуально я попытался использовать массив хэшей. где индекс массива дает идентификатор человека, а хэш в нем дает ids <=> scores
в отсортированном виде. Я изначально начинаю с массива хэшей. Теперь я сортирую хэши по значениям, но я не могу сохранить отсортированные хэши обратно в массив. Так что просто сохранили ключи после сортировки и использовали их для получения значений из моих первоначальных несортированных хешей.
Можем ли мы сохранить хеши после сортировки?
Можете ли вы предложить лучшую структуру?