配对算法(Gale-Shapley)实现
算法分析课程作业(仅供参考)
源代码:
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;/*** @description: Gale-Shapley algorithm* @author: Qing Zhang* @time: 09*/
public class GaleShapley {/*** @Description: GS algorithm* note: The number of men must be equal to women.* @Param: [* paraManPreferences : Men's Descending Preference Array for Women.* paraWomanPreferences : Women's Descending Preference Array for Men* ]* @return: java.util.HashMap<java.lang.Integer, java.lang.Integer>*/public static HashMap<Integer, Integer> gsAlgorithm(int[][] paraManPreferences, int[][] paraWomanPreferences) {// initial.int numOfMan = paraManPreferences.length; // number of menint numOfWoman = paraWomanPreferences.length; // number of womenif (numOfMan != numOfWoman) {System.out.println("The data format is wrong!");return null;}// Record whether women are freeboolean[] singleWoman = new boolean[numOfWoman];// Women’s preference for men, sorted by male numberint[][] womanPreferencesToMan = new int[numOfWoman][numOfMan];for (int i = 0; i < numOfWoman; i++) {for (int j = 0; j < numOfMan; j++) {womanPreferencesToMan[i][paraWomanPreferences[i][j]] = j;}}// Single manQueue<Integer> singleMan = new LinkedList<>();// Results after allocation (female, male)HashMap<Integer, Integer> lovers = new HashMap<>();for (int i = 0; i < numOfMan; i++) {singleMan.add(i);}// Loop... Find the woman for every single man.while (!singleMan.isEmpty()) {int curMan = singleMan.peek();int curWoman;for (int i = 0; i < numOfWoman; i++) {curWoman = paraManPreferences[curMan][i];if (!singleWoman[curWoman]) {lovers.put(curWoman, curMan);singleWoman[curWoman] = true;singleMan.poll();break;} else if (womanPreferencesToMan[curWoman][lovers.get(curWoman)]> womanPreferencesToMan[curWoman][curMan]) {singleMan.add(lovers.get(curWoman));lovers.put(curWoman, curMan);singleMan.poll();break;}}}return lovers;}public static void main(String[] args) {int[][] man = new int[][]{{0, 1, 2}, {1, 0, 2}, {0, 1, 2}};int[][] woman = new int[][]{{1, 0, 2}, {0, 1, 2}, {0, 1, 2}};HashMap<Integer, Integer> lovers = GaleShapley.gsAlgorithm(man, woman);if (lovers != null) {for (Map.Entry<Integer, Integer> entry : lovers.entrySet()) {System.out.println(entry.getValue() + "号男性---" + entry.getKey() + "号女性");}}}
}
构造数据:
运行结果:
C:\Users\Administrator\.jdks\temurin-11.0.12-1\bin\java.exe "-javaagent:E:\IntelliJ IDEA 2020.1\lib\idea_rt.jar=56703:E:\IntelliJ IDEA 2020.1\bin" -Dfile.encoding=UTF-8 -classpath D:\JavaProject\JustForTest\out\production\JustForTest GaleShapley
0号男性---0号女性
1号男性---1号女性
2号男性---2号女性Process finished with exit code 0
配对算法(Gale-Shapley)实现相关推荐
- m分集2跳OFDM系统中基于功率分配和子载波配对算法的信道容量matlab仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 随着当代无线通信事业的迅猛发展,无线频谱资源已显得越来越匮乏,传统固定静态的无线频谱分配模式 ...
- 稳定婚姻问题:Gale–Shapley算法
(一)问题的引出 在组合数学.经济学.计算机科学中,稳定婚姻问题(英语:stable marriage problem,简称SMP)又称为稳定配对问题(stable matching problem) ...
- 机组配对算法matlab,基于MATLAB的风力发电机组控制算法的研究 - 北极星风力发电网...
4.2 载荷仿真 BLADED软件外部控制器模块能使用任何期望的控制算法,因此为验证本文所设计控制算法的性能,将对新控制算法与在VC下开发的常规控制算法进行载荷仿真比较,运行风况为如图6所示,下图所示 ...
- 【Gale Shapley 婚姻稳定匹配算法实现】
原理: 所有男性按照好感的高低向对应女性求婚 每个女性在所有的向她发出求婚的男性和其丈夫(如果暂无丈夫则不做比较)选择一个最喜欢的,如果这个最喜欢的是当前的丈夫,则婚姻关系不变,否则与当前丈夫离婚,并 ...
- 算法(Python版)|156Kstars|神级项目-(1)The Algorithms - Python简介
文章目录 算法(Python版) 项目地址 项目概况 说明 参与入门 社区频道 算法列表 Arithmetic Analysis 算术分析 Audio Filters 音频过滤器 Backtracki ...
- RANSAC算法在图像拼接上的应用的实现
关于算法原理请参考<基于SURF特征的图像与视频拼接技术的研究>. 一.问题提出 RANSAC的算法原理并不复杂,比较复杂的地方在于"建立模型" ...
- 两个矩阵是否相交的算法_刷透近200道数据结构与算法,成功加冕“题王”,挤进梦中的字节!...
不管是学生还是已经工作的人,我想彼此都有一个相同的梦想:进大厂! 眼看着2020年还有个三十来天就要完美收尾了,那么如何才能在未来三个月弯道超车赶上"金三银四的春招",进入梦寐以求 ...
- “稳定婚姻算法”雨夜谈-M/N资源匹配问题
连续数月的阴雨绵绵,江南烟雨似乎没有停止的迹象,近日又迎来了下半年目前为止最猛烈的寒潮,无论哪一个都是我超级期待和喜欢的,这样的天气,不适合睡觉. 一个很不错的算法,稳定婚姻算法. 先给出一个概念,来 ...
- 一看“左程云:200道算法与数据结构”,二刷“阿里云:70+算法题、30种大厂笔试高频知识点”,3月过去终于挺进我梦中的字节!
不管是学生还是已经工作的人,我想彼此都有一个相同的梦想:进大厂! 眼看着2020年还有个三十来天就要完美收尾了,那么如何才能在未来三个月弯道超车赶上"金三银四的春招",进入梦寐以求 ...
- 算法推荐女朋友,靠谱吗?
作者 | 抓码青年 责编 | 张红月 如果有一天让你同算法推荐给你的异性结婚,你会愿意吗? 前几天,抓码君在浏览微博时刷到了这条热搜:#腾讯获推荐婚恋对象专利授权#. 细查一番,发现鹅厂在 ...
最新文章
- U盘安装CentOS 7
- 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第9章-二阶连续时间时延多智能体系统加权一致性
- agv ti 毫米波雷达_激光雷达VS毫米波雷达 谁才是自动驾驶“头号玩家”?
- 让JavaScript回归函数式编程的本质
- Angular单元测试里使用fixture.debugElement测试UI界面元素
- python代码书写_Python代码的优雅写法,让代码更简洁
- oracle比较两个表数据的差异
- 在linux下进行嵌入式系统设计,一种应用于测控系统的基于Linux的嵌入式系统的设计...
- 软件测试--缺陷报告
- Java学习(二)Object
- 【数学建模】基于matlab模糊二元决策树【含Matlab源码 038期】
- 如何进行代理上网以及ccproxy设置
- Spring之bean标签属性详解
- linux解压带密码zip,linux下解压有密码的rar压缩包的方法
- 常见的系统漏洞安全扫描修复总结归纳
- 4GMF论坛主席卢伟谈4G全球发展概况
- 【TLD】改进后的TLD视频目标跟踪方法的MATLAB仿真
- matlab程序二不能用于负数,matlab中负数的二进制码如何求取
- 黑马程序员还收费 兄弟会都是免费的
- php wx.downloadimage,大神,wx.downloadImage 图片过期问题