【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字典取值的几种方法

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

    2023年04月26日
    浏览(31)
  • Python保存图像的几种方式

    记录读取和保存图像的几种方式 1.1、使用 cv2 读取图片,注意:opencv打开路径中不能有中文!!! 1.2、使用 rasterio 读取遥感影像 1.3、使用 Image 读取图像 2.1、使用 cv2 保存图片 2.2、使用numpy保存 2.3、使用plt保存 参考: https://blog.csdn.net/xzm961226xzm/article/details/120951317 https://bl

    2024年02月11日
    浏览(38)
  • Python 打开网页的几种方式

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

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

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

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

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

    2024年02月16日
    浏览(42)
  • 头歌Python实训答案——Python的几种数据结构

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

    2024年02月05日
    浏览(59)
  • 统计文本词频的几种方法(Python)

    目录 1. 单句的词频统计 2. 文章的词频统计 方法一:运用集合去重方法 方法二:运用字典统计 方法三:使用计数器 词频统计是自然语言处理的基本任务,针对一段句子、一篇文章或一组文章,统计文章中每个单词出现的次数,在此基础上发现文章的主题词、热词。 思路:首

    2024年02月04日
    浏览(33)
  • Python 四则运算的几种方法?

    Python的四则运算主要有以下几种方法: 1、使用基本算术运算符: Python支持基本的算术运算符,包括加(+), 减(-), 乘(*), 除(/) 和求模运算符(%), 可以用于数值类型的数据,例如整数(int)、浮点数(float)等。例如: 2、使用math模块中的函数: Python的标准库中提供了一个math模块,其

    2024年03月21日
    浏览(32)
  • python操作PDF的几种常见方法

    大家好,有关python操作pdf的方法,各种语言处理起来都比较麻烦,而且各种第三方库的应用场景都不同。下面说明一下python如何通过第三方库如何处理pdf文件。 1.1、pdfplumber提取文本内容 安装pdfplumber pdfplumber提取PDF中文字代码思路如下 利用pdfplumber打开一个 PDF 文件 获取指定

    2024年02月03日
    浏览(33)
  • python 忽略警告(warning)的几种方法

    不需要import warning就可以执行 这种方法的优点是可以选择特定的语句隐藏警告。

    2024年02月12日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包