栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

根据投票将人分类

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

根据投票将人分类

您可以通过将其公式化为最低成本的网络流量问题来最佳地解决此问题。

为每个人添加一个节点,为每个项目添加一个。

根据人员和项目的偏好设置成本。

(由于Networkx提供了最小成本流,但没有提供最大成本流,因此我将成本设置为负。)

例如,使用Networkx和Python:

import networkx as nxG=nx.DiGraph()prefs={'Tom':['Project1','Project2','Project3'],       'Dick':['Project2','Project1','Project3'],       'Harry':['Project1','Project3','Project1']}capacities={'Project1':2,'Project2':10,'Project3':4}num_persons=len(prefs)G.add_node('dest',demand=num_persons)A=[]for person,projectlist in prefs.items():    G.add_node(person,demand=-1)    for i,project in enumerate(projectlist):        if i==0: cost=-100 # happy to assign first choices        elif i==1: cost=-60 # slightly unhappy to assign second choices        else: cost=-30 # very unhappy to assign third choices        G.add_edge(person,project,capacity=1,weight=cost) # Edge taken if person does this projectfor project,c in capacities.items():        G.add_edge(project,'dest',capacity=c,weight=0)flowdict = nx.min_cost_flow(G)for person in prefs:    for project,flow in flowdict[person].items():        if flow: print person,'joins',project

在此代码中,Tom的第一选择是Project1,然后是Project2,然后是Project3。

容量字典指定每个项目可以加入的人数上限。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637393.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号