稳定匹配算法实验是计算机科学与技术领域中关于算法设计与分析的重要课题之一。本次实验的核心是研究并实现一种能够产生稳定匹配的算法,即著名的“盖尔-沙普利(Gale-Shapley)”算法,又称为“医院-住院医师问题”,它由数学家戴维·盖尔和劳埃德·沙普利提出,广泛应用于婚姻问题、实习医生匹配以及公司招聘等多个领域。
需要理解实验目的。实验的目的是为了加深对稳定匹配算法理论知识的理解,并通过编程实践,掌握算法从分析、设计到实现的全过程。通过编写稳定匹配算法的程序代码,并在实际运行过程中对算法性能进行测试和分析,可以发现算法在性能上的特点及可能存在的不足。
实验中所提及的稳定匹配,是指找到一种配对方式,其中没有一对男女会因为对方而在当前的配对之外寻求更好的配对。即在任何匹配中,不存在男性a和女性b互相偏爱对方,但与各自当前的伴侣不匹配的情况。
实验描述中提到的匹配过程是一个典型的迭代过程。算法从所有男人和女人都是“自由”的状态开始,迭代直至所有男人都已向所有女人求过婚。在每次迭代中,算法会选择一个尚未向所有女人求过婚的男性m,然后从其偏好列表中选择一个尚未拒绝过其求婚的最高排名的女性w。如果女性w也是自由的,就将(m,w)设置为约会状态;如果w已有约会对象,那么就需要比较m与w当前约会对象m’的偏好程度,根据比较结果决定是否改变约会状态。
编程语言方面,考虑到大部分同学对JAVA较为熟悉,因此实验优先采用JAVA实现。然而,鼓励有能力的学生尝试使用C++实现算法,以便在时间效率和空间效率上与JAVA进行比较,这样能够更好地理解不同编程语言在处理同一问题时的优劣。
实验结果的输出应当详细记录。最基本的要求是输出n=3、5、7时的稳定匹配结果。此外,需要能够调整n的数值以输出任意大小的稳定匹配结果,并确保代码具有良好的可读性和整洁性。
为了验证实验结果的正确性,需要使用Junit或其他测试工具编写测试用例,并确保所有测试用例都能正确运行。在此基础上,进一步在测试用例中调整n的数值,直至系统抛出内存耗尽的异常,并记录下这些数值及其对应的运行时间,若能通过可视化手段展现结果则更加理想。
在实验的具体实施过程中,还应参考一些可能用到的JAVA类,这些类可以帮助实现数据结构的构建、算法的编写和测试用例的设计。例如,可以利用JAVA的集合框架(如List, Set, Map等)来存储男人和女人的偏好列表,使用IO流进行数据的输入输出等。
稳定匹配算法实验是一个结合理论与实践的综合性课题,通过本次实验,学生不仅能够加深对稳定匹配算法的理解,还能够提升编程能力和解决实际问题的能力。此外,通过算法性能的分析和不同编程语言的比较,学生可以更好地理解算法设计的复杂性以及在不同应用场景下选择合适编程语言的重要性。