算法需求如下:

有八个人对应分配了八个位置,但是其中一些人对自己的位置并不满意,问在最多人满意的情况下,最后调换位置的有哪几个?人物对应喜好如下图:

图例:(A和B都喜欢C位,但是分配到的分别是A位和B位)

思路:

如果拿到问题,我们首先对于问题做一个分析:对于要求满意的人尽可能多,也就是调换位置的人尽可能多,求调换位置的有多少,那我们可以换个思路,不调换位置的有多少,假如说它本身就在自己喜欢的位置,那么他不用调换位置,如果两个人刚好喜欢对方喜欢的位置,那么可以互换,剩下的如果还有人喜欢那个位置,那么这个人就要被淘汰,比如上图的A和B和C,A和B都喜欢C位而C喜欢A位,那么如果把A淘汰,那么C的位置就得不到满足(A被淘汰意味着A就坐在A位),那么如果淘汰B,看起来是个正确的选择,因为C可以和A互换,得到都满意的结果。

知道了需要 剔除那些元素,下面开始实现这个算法。

先用一个列表表示人物的位置关系

U = 【2,2,0,5,3,5,7,4】

前两个元素都想在第二个位置

U【1】=U【2】=1

首先,通过观察我们发现,对于一般的位置而言,我们有两个输入的都会删除其中一个,比如A和B,那么先贴代码:

遇到问题没人解答?小编创建了一个Python学习交流QQ群:895817687 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!def max_perm(m):n = len(m)A = set(range(n))count = [0]*nfor i in m:count[i]+=1Q = [i for i in A if count[i] == 0]print(Q)while Q:i = Q.pop()print(i)A.remove(i)j = m[i]count[j] -= 1if count[j] == 0:Q.append(j)return A
m = [2,2,0,5,3,5,7,4]
print(max_perm(m))

创建一个长度为8的列表,记录位置,然后一个全部为0的列表用来记录对应的输入,比如第三个位置有两个输入就记为2,那么我们得到一个记录入边数目的列表为[1,0,2,1,1,2,0,1]

也就是代码中的count(计数器)

Q是为了记录count中为0的元素对应的在A中的元素,也就是没有入边的位置,没人喜欢的位置,直接删除,也就是{1,6},从图中可以看出,第2个位置和第7个位置没人想坐(没有边输入)故直接淘汰

接着进入while循环,将栈中顶部元素弹出,也就是6,将6对应的A中的元素也删除,因为这个人和这个位置是绑定的,位置没了,人也就被淘汰了,他只能坐6号了。

接着获取M列表中对应的第i个元素获取对应元素,如果这个元素入边数目为1,那么这个就是下一个要删除的对象,因为没了i ,就一个入边也没了,以此推下去,我在代码中顺便打印了对应弹栈出来的元素,方便学习。

[1, 6]
6
7
4
3
1
最后结果:{0, 2, 5}

最大排列问题的算法实现(Python)究竟最后调换位置的有哪几个?相关推荐

  1. python实现排列组合公式算法_Python实现卡尔曼滤波算法之贝叶斯滤波

    Python实现卡尔曼滤波算法之贝叶斯滤波 作者:yangjian 卡尔曼滤波器属于贝叶斯滤波器的一种特例,本文主要讲解贝叶斯滤波原理及其算法的python实现. 先来看下贝叶斯公式 贝叶斯公式 :后 ...

  2. python是一门什么课程-Python究竟是一门怎样的语言,Python为什么这么火?

    Python究竟是一门怎样的语言? Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些 ...

  3. 数据结构与算法(Python)第一天

    数据结构与算法(Python)第一天 数据结构与算法(Python)第一天 算法引入 第一次尝试 算法的提出 算法的概念 算法的五大特性 第二次尝试 算法效率衡量 执行时间反应算法效率 单靠时间值绝对 ...

  4. 生成组合对象的算法——Johnson-Trotter算法的python实现

    伪代码是Anany Levitin 著作的<算法设计与分析基础> ,初学代码,发现网上几乎没有Johnson-Trotter算法的python实现,所以自己根据伪代码琢磨了一下,写了这个代 ...

  5. Python究竟是个啥?为什么985的学生都在学它?早就该曝光了

    现在网上一搜学Python能做什么,无一例外地全跳出来一堆的专业名词,看的时候虎躯一震,看完之后,依然不知道学会了能干啥- 不知道大家是不是也有同样的感受,为了解决大家这种困惑,我今天特意花时间总结了 ...

  6. python数据结构算法_数据结构与算法(Python)

    数据结构与算法(Python) Why? 我们举一个可能不太恰当的例子: 如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰 ...

  7. 基于朴素贝叶斯的垃圾分类算法(Python实现)

    有代码和数据集的 https://blog.csdn.net/weixin_33734785/article/details/91428991 附有git库代码的 https://www.cnblog ...

  8. 手把手教你在多种无监督聚类算法实现Python(附代码)

    来源: 机器之心 本文约2704字,建议阅读6分钟. 本文简要介绍了多种无监督学习算法的 Python 实现,包括 K 均值聚类.层次聚类.t-SNE 聚类.DBSCAN 聚类. 无监督学习是一类用于 ...

  9. 八大排序算法的 Python 实现

    八大排序算法的 Python 实现 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入 ...

最新文章

  1. 河南省第二届ACM程序设计大赛解题报告(置换群)
  2. Two Straws May Make a Perfect Diamond: Selecting Individually Weak Features for a Better Accuracy
  3. 轻松精通数据库管理之道——运维巡检系列
  4. SAP CRM扩展字段的渲染和属性处理原理
  5. python你会吗_Python这些问题你会吗?
  6. python3 xlrd包的用法
  7. java-io流理解
  8. 百度竞价常用术语总结
  9. 浅谈欧奈尔对利弗莫尔的继承和发扬
  10. redis如何查看主从状态信息master和salve
  11. SCSI, IED, SATA 具体是什么
  12. 微信“商家转账到零钱“功能接入以及如何获得转账结果?
  13. ABP文档 - Mvc 控制器
  14. 支付宝给个人账号转账付款
  15. The Things Network LoRaWAN Stack V3 学习笔记 2.5 LoRa节点配置接入
  16. Failure to find xxx in 中央仓库
  17. Firefox 浏览器能,IE为什么不能?
  18. HTTP状态码及说明大全
  19. 关于QT TTS ( TextToSpeech ) 编码导致的只能读英文不能读中文的问题
  20. 单运放和双运放有什么区别?

热门文章

  1. c语言 写出raw文件,求指导,如何用c语言实现读取*.raw格式图像
  2. SpringMVC-组件分析之视图解析器(prefix,suffix)
  3. 案例代码:springboot+shiro配置同一用户多设备登录最大会话数
  4. docker svn
  5. 深入理解Oracle表(5):三大表连接方式详解之Hash Join的定义,原理,算法,成本,模式和位图
  6. TensorFlow学习笔记之一(TensorFlow基本介绍)
  7. MyBatis-学习笔记02【02.Mybatis入门案例】
  8. Java-GUI编程实战之管理系统 Day1【项目开发流程、软件三层架构、项目需求、项目结构分析】
  9. Android 国际化
  10. Java垃圾回收(GC)机制详解