`
trydofor
  • 浏览: 152312 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

005.测验.情景之男女相亲算法

阅读更多


# 005.测验.情景之男女相亲算法

相亲算法,源于剩男剩女的相亲,解决男女速配问题。
过程大概是:根据相亲喜好,男女互相,按分值匹配。

@史荣久 / 2015-02-02 / CC-BY-SA-3.0

## 任务说明

事实上,爱美之心人皆有之,追求物质符合自然选择。
现状是,韩剧里高富帅棒子稀缺,白富美洗白的居多。

现在,我们搞一个相亲算法,让高富帅和白富美速配。
有三对单身男女,姓名,特点和心中的TA的特点如下:

人及属性 | 对TA的喜好及分值
1:高 富 | 富:10,白:20,美:30
2:白 富 | 富:10,高:20,帅:30
3:高 帅 | 富:30,白:10,美:20
4:白 美 | 富:30,高:10,帅:20
5:高富帅 | 富:10,白:30,美:20
6:白富美 | 富:10,高:30,帅:20

这样,以男1号"高富"为例,他对女选手喜好如下:
女2号:白+富 = 20+10 = 30
女4号:白+美 = 20+30 = 50
女6号:白+富+美 = 10+20+30 = 60

算法只对喜好值求和,对存在加,不存在的不加。
以此类推,为每个单身者计算出候选人列表。

男1:女2(30),女4(50),女6(60)
女2:男1(30),男3(50),男5(60)
男3:女2(40),女4(30),女6(60)
女4:男1(40),男3(30),男5(60)
男5:女2(40),女4(50),女6(60)
女6:男1(40),男3(50),男5(60)

可以看到,男5和女6最受欢迎,但这只是单方面的。
以女6为例,把男相女和女相男的分值求和,得总分。

女6+男1 = 40+60 = 100
女6+男3 = 50+60 = 110
女6+男5 = 60+60 = 120

这样,女6和男5分值最高,匹配成功。以此类推。
最后,牵手情况:男5+女6,男1+女4,男3+女2

## 数据存储

以下几张表,无事务,只读不写,因此使用MyISAM表引擎。

CREATE TABLE IF NOT EXISTS `USER` (
`UID` INT NOT NULL COMMENT '单身用户ID',
`GENDER` INT NOT NULL COMMENT '性别:0-女,1-男',
`NAME` VARCHAR(45) NOT NULL COMMENT '用户姓名',
PRIMARY KEY (`UID`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;

CREATE TABLE IF NOT EXISTS `LABEL` (
`LID` INT NOT NULL COMMENT '标签ID',
`NAME` VARCHAR(45) NOT NULL COMMENT '标签名字',
PRIMARY KEY (`LID`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;

CREATE TABLE IF NOT EXISTS `USER_LABEL` (
`UID` INT NOT NULL COMMENT '用户',
`LID` INT NOT NULL COMMENT '用户的标签',
PRIMARY KEY (`UID`, `LID`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;

CREATE TABLE IF NOT EXISTS `USER_LOVE` (
`UID` INT NOT NULL COMMENT '用户',
`LID` INT NOT NULL COMMENT '喜好的标签',
`SCORE` INT NULL COMMENT '喜好分值',
PRIMARY KEY (`UID`, `LID`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;

-- 插入记录
INSERT INTO `LABEL` (`LID`, `NAME`) VALUES 
(0, '富'),(1, '高'),(2, '白'),(3, '帅'),(4, '美');

INSERT INTO `USER` (`UID`, `GENDER`, `NAME`) VALUES 
(1, 1, '高富'),(3, 1, '高帅'),(5, 1, '高富帅'),
(2, 0, '白富'),(4, 0, '白美'),(6, 0, '白富美');

INSERT INTO `USER_LABEL` (`UID`, `LID`) VALUES 
(1, 0),(1, 1),
(2, 0),(2, 2),
(3, 1),(3, 3),
(4, 2),(4, 4),
(5, 0),(5, 1),(5, 3),
(6, 0),(6, 2),(6, 4);

INSERT INTO `USER_LOVE`(`UID`,`LID`,`SCORE`) VALUES
(1, 0, 10),(1, 2, 20),(1, 4, 30),
(2, 0, 10),(2, 1, 20),(2, 3, 30),
(3, 0, 30),(3, 2, 10),(3, 4, 20),
(4, 0, 30),(4, 1, 10),(4, 3, 20),
(5, 0, 10),(5, 2, 30),(5, 4, 20),
(6, 0, 10),(6, 1, 30),(6, 3, 20);

-- 检查数据
SELECT U.NAME,
GROUP_CONCAT(L.NAME ORDER BY L.LID) 
FROM USER_LABEL AS UL,USER AS U,LABEL AS L
WHERE UL.UID = U.UID AND UL.LID=L.LID 
GROUP BY U.NAME ORDER BY U.UID;

SELECT U.NAME,
GROUP_CONCAT(L.NAME,':',UL.SCORE ORDER BY L.LID) 
FROM USER_LOVE AS UL,USER AS U,LABEL AS L
WHERE UL.UID = U.UID AND UL.LID=L.LID 
GROUP BY U.NAME ORDER BY U.UID;


## 问题来了

我们称以上算法为相亲算法(blindate),请尽情发挥。

(1)实现相亲算法,输入男,输出候选女的列表和分值。
即:输入男(UID),得到候选女的列表(UID,SCORE)

(2)用户量增到男女各5万,人均标签从3个增到10个。
要重构程序实现,要求候选女的列表按喜比例分配。

例如:男1的喜好值仍为:富:10,白:20,美:30,
则输出列表中,富占1/6,白占2/6,美占3/6。
列表需要去重(distinct),数量不足时需要补充。
优先满足每用户输出100个候选,然后考虑比例。

(3)假设,相亲算法在10万男x10万女时,有性能瓶颈。
请谈谈改善方法和依据。

----
题图:《非诚勿扰》是一档男女速配的相亲节目,很多人疑其真假,评其美丑,但这些真的那么重要么?
原文:http://www.moilioncircle.com/actions/005.quiz.case-blind-date.html 
0
4
分享到:
评论

相关推荐

    国密算法工具smartTool软件,算法测试工具,可用于国密算法辅助测试.zip

    国密算法工具smartTool软件,算法测试工具,可用于国密算法辅助测试,包括对称及非对称算法。

    群智能算法matlab测试函数.zip

    "群智能算法matlab测试函数.zip"这个压缩包集合了一些在这些算法中常用的标准测试函数,为研究者和工程师提供了一个方便的测试平台,以验证和比较不同算法的性能。 首先,我们来详细了解下这些算法: 1. **粒子群...

    [麻省理工学院-算法导论].Introduction.to.Algorithms.-.Test 课程测试

    通过这些测试,学生不仅需要掌握算法的实现,还需要具备分析算法效率、解决问题的能力,以及在面对复杂问题时灵活应用所学知识的技巧。在准备这些测试时,除了阅读教材和完成习题,参加讨论和模拟考试也是十分有益的...

    51单片机循迹小车PID算法.zip

    5. **测试与调试**:记录了在不同环境和条件下的测试结果,以及如何根据测试反馈优化算法。 总的来说,51单片机循迹小车的PID算法实现是一项综合性的工程实践,它融合了硬件设计、嵌入式编程和控制理论等多个领域的...

    超分辨率的算法可测试-POCS算法.rar

    在"超分辨率的算法可测试-POCS算法.rar"压缩包中,可能包含了MATLAB实现POCS算法的相关代码,以及一个名为“新建文件夹 (2)”的子文件夹,里面可能包含示例图像和预处理或后处理脚本。通过运行这些代码,用户可以...

    算法测试基准函数

    在IT领域,尤其是在优化算法和人工智能的研究中,测试基准函数起着至关重要的作用。"算法测试基准函数"是一组专门设计用于评估和比较不同智能算法性能的数学模型。这些函数通常具有不同的特性,如多模态、非线性、...

    常见经典算法测试重点知识点总结.docx

    算法 章节目录 一、算法基本概念与原理 二、算法设计与分析 三、常用经典算法 四、算法复杂度与优化 五、高级算法专题 一、算法基本概念与原理 重点详细内容知识点总结 1.算法定义:算法是一组解决特定问题的规则或...

    无线传感器网络覆盖优化算法模拟测试平台源码.zip

    无线传感器网络覆盖优化算法模拟测试平台源码.zip无线传感器网络覆盖优化算法模拟测试平台源码.zip无线传感器网络覆盖优化算法模拟测试平台源码.zip无线传感器网络覆盖优化算法模拟测试平台源码.zip无线传感器网络...

    matlab AP聚类算法.zip

    在IT领域,特别是数据分析和机器学习中,聚类算法是一种常用的技术,用于将数据无监督地分组到不同的类别中。AP(Affinity Propagation)聚类算法是其中的一种,由Scott D.浚和Michael I. Jordan在2007年提出。...

    人工蜂群算法以及测试函数

    人工蜂群算法(Artificial Bee Colony,ABC)是一种模拟自然界蜜蜂采蜜行为的全局优化算法,由Karaboga在2005年提出。该算法借鉴了蜜蜂社会中寻找蜜源的行为模式,包括工蜂、侦查蜂和食物源三个基本概念,用于解决多...

    几种能用于小ram单片机的压缩算法.7z

    在嵌入式系统和物联网设备中,有限的RAM资源对数据处理能力构成了严峻挑战。针对这类情况,开发者经常需要寻找适合小RAM单片机的...在实际应用中,可能需要进行性能测试和权衡,以找到最适合小RAM单片机的解决方案。

    论文研究-针对规则更新操作的测试数据包选取算法.pdf

    防火墙规则集中存在的配置错误主要来源于规则的添加、删除等更新...理论分析和仿真实验表明,与现有测试算法相比,在进行规则更新时,PCRU算法只需使用少量的测试数据包,即可检测出所有因规则冲突而导致的配置错误。

    国密SM9算法测试工具

    VS2015写的SM9算法测试工具,包括KGC密钥生成、签名验签、密钥封装解封、加密解密、密钥交换。另外还有SM2/3/4系列算法、SHA系列算法、几个分组算法、Base64编码和C++的随机数生成测试。

    论文研究-基于遗传算法的混合蚁群算法.pdf

    提出了一种新的求连续空间最优值的蚁群算法。结合遗传算法和蚁群算法各自的优点以及两种算法融合基础,提出了遗传算法融入到蚁群算法融合中的两...用测试函数Rosenbrock和测试函数Shubert验证了混合蚁群算法的正确性。

    论文研究-人工鱼群与微粒群混合优化算法.pdf

    针对人工鱼群算法局部搜索不精确、微粒群优化算法易发生过早收敛等问题,...最后,以五个标准函数和一个应用实例进行测试,测试结果表明,提出的算法在一定程度上避免了陷入局部极小,加快了收敛速度且提高了搜索精度。

    MPPT算法.rar

    此外,它还可能提到了如何将该算法集成到光伏充电器的控制电路中,以及如何进行性能测试和优化。 “资料说明.txt”文件可能是对整个压缩包内容的简要说明,列出所有文件的作用和相互关系,为用户提供一个整体的视图...

    论文研究-求解多星任务规划问题的演化学习型蚁群算法.pdf

    论文研究-求解多星任务规划问题的演化学习型蚁群算法.pdf, ... 采用多星任务规划问题的21个测试实例进行实验, 结果表明演化学习型蚁群算法在优化性能方面优于其他两种方法.

    为简化的电梯调度算法设计测试用例.rar

    在这个压缩包中,包含的文件主要围绕着简化版电梯调度算法的测试用例设计展开。让我们逐一解析这些文件,深入理解其中涉及的知识点。 1. **电梯题目.txt**: 这个文件很可能包含了电梯调度问题的具体描述,包括...

Global site tag (gtag.js) - Google Analytics