【Python】求矩阵鞍点的几种思路

这篇具有很好参考价值的文章主要介绍了【Python】求矩阵鞍点的几种思路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


代码思路仅供参考,欢迎大家批评指正!



求矩阵鞍点的个数

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

题目详情

python中怎样利用bf算法求解马鞍点,Python,python,矩阵,算法

思路1

遍历矩阵m,判断每一个点是否为鞍点。时间复杂度为O(n3)

代码

# By jurio.
n = int(input())
m = []
for r in range(n):
    m.append(input().split())

c = 0
for i in range(n):
    for j in range(n):
        if m[i][j] == max([m[i][k] for k in range(n)]) and m[i][j] == min([m[k][j] for k in range(n)]):
            c+=1
print(c)

思路2

根据鞍点的特征——某一行最大值,即一行最多存在一个鞍点,所以只需遍历每一行判断当前行是否有鞍点即可。时间复杂度为O(n2)

代码

# By jurio.
n = int(input())
m = []
for r in range(n):
    m.append(input().split())

r0 = 0
saddle_point = 0
for r0 in range(n):
    max_id = [index for (index,value) in enumerate(m[r0]) if value == max(m[r0])]
    for id_i in max_id:
        if m[r0][id_i] == min(m[r][id_i] for r in range(n)):
            saddle_point += 1
print(saddle_point)

思路3

我们知道鞍点不仅是某一行最大值,同时是该行最大值那一列的最小值。那么理论上可以用下面的算法进行查找:

  1. 从第一行开始找到最大值,然后判断是否为当前列最小值;
  2. 若是最小值则鞍点个数+1,同时该列可以排除(后续检索到该列直接跳过),然后行数+1重新开始;
  3. 若不是则找到该列最小值,将最小值所在行作为新的起点,并判断该最小值是否为鞍点;
  4. 若是鞍点则+1,排除当前行和列;
  5. 若不是则排除列,同时继续寻找该行最大值,即回归第1步。

上述思路可以使用两个列表来存储已排除的行和列,并在遍历时判断当前行列是否已在排除列表。理论上时间复杂度应该为O(nlogn)

PTA暂时无法使用numpy,用列表实现比较困难暂时没有代码实现,上述算法仅代表个人看法,思路不对的地方希望大家批评指正。文章来源地址https://www.toymoban.com/news/detail-774506.html

到了这里,关于【Python】求矩阵鞍点的几种思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python 打开网页的几种方式

    方法1:直接调用系统命令 os 方法2:引用webrowser包 方法3:引用selenium工具,解决闪退问题 附:Pycharm 安装selenium 工具说明

    2024年02月16日
    浏览(45)
  • python数组循环的几种方式

     Python中循环数组有几种方式: for-in循环,可以遍历数组中的每一个元素。 while循环,使用索引进行循环。 列表推导式,可以快速创建新的列表。 递归,可以遍历多维数组。 enumerate() 函数,在循环中同时获取索引和元素

    2024年02月16日
    浏览(74)
  • Python统计词频的几种方法

    本文介绍python统计词频的几种方法,供大家参考 目录 方法一:运用集合去重方法 方法二:运用字典统计 方法三:使用计数器 说明:运用集合对文本字符串列表去重,这样统计词汇不会重复,运用列表的counts方法统计频数,将每个词汇和其出现的次数打包成一个列表加入到

    2024年02月13日
    浏览(37)
  • python下载包的几种方法

    有时候下载包总是报错,各种各样的错误。参考了很多很多,最终想记下一些。按照从易到繁的顺序。 最方便的就是通过pycharm编译器,点击加号搜索包。 然后是用anaconda prompt使用命令 pip install [-i 镜像网址] 包名,方括号可有可无,看下载速度或者是否报错。 接着就是跑到

    2024年02月15日
    浏览(44)
  • python字典取值的几种方法

            Python 字典(dictionary)是一种可变容器模型,可以存储任意数量的任意类型的数据。字典中的每个元素由一个键和一个值组成,键和值之间用冒号分隔。字典通常用于存储键值对的数据,例如在数据库中存储记录。 以下是 Python 字典取值的几种方法及其代码演示: 方法

    2023年04月26日
    浏览(40)
  • 头歌Python实训答案——Python的几种数据结构

    第1关:列表及操作 #coding = utf-8 #********* Begin *********# #第一步 请在列表fruits中找出不属于水果一类元素,赋值给变量 a fruit = [\\\"苹果\\\",\\\"梨子\\\",\\\"菠萝\\\",\\\"黄瓜\\\",\\\"香蕉\\\"] a =\\\"黄瓜\\\" #第二步 将变量 a 的值添加到列表vegetable 的末尾 vegetable = [\\\"土豆\\\",\\\"萝卜\\\",\\\"茄子\\\",\\\"白菜\\\"] vegetable.append(a) #第三

    2024年02月05日
    浏览(68)
  • python - 线程的启动的几种方式

    本文主要给大家介绍python启动线程的四种方式 创建 Thread 对象,然后调用 start() 方法启动线程。 重写 run() 方法,并调用 start() 方法启动线程。 使用ThreadPoolExecutor 类的 submit() 方法提交任务,自动创建线程池并执行任务。 创建进程,然后在进程中启动线程。 以上就是python中启

    2024年02月12日
    浏览(44)
  • 运行 Python 脚本/代码的几种方式

    哈喽大家好,我是咸鱼 我们知道,python 脚本或者说 python 程序其实是一个包含了 python 代码的文件。要让它们实现特定功能,我们需要知道该如何运行(run)它 通过运行 python 代码,我们可以验证脚本/程序是否按照我们的期望执行。这也使我们能够对其进行测试和调试,以便

    2024年02月08日
    浏览(50)
  • python中导入模块/包的几种方式

    一、模块的导入方式 模块就是.py类型的Python文件 导入时不需要.py后缀,直接导入文件名即可 1.利用import直接导入: 语法:import module_name 使用方式:module_name.class_name或者module.func_name 2.利用import导入模块并设置一个别名 语法:import module_name as XXX 使用方式:XXX.class_name或者X

    2024年01月22日
    浏览(45)
  • python创建虚拟环境的几种方式

    venv是Python的虚拟环境管理工具,它可以创建独立的Python环境,让不同项目使用不同的Python版本和依赖库,避免版本冲突和依赖冲突问题。使用Python venv可以方便地创建、激活、退出、删除虚拟环境,以及在虚拟环境中安装、升级、卸载包等操作。   以下是使用Venv创建和管理

    2024年02月02日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包