zoukankan      html  css  js  c++  java
  • 20190110-用笨办法找到二维矩阵的鞍点

    1:找出一个多维数组的鞍点,即该元素在该行上最大,在该列上最小,也可能没有鞍点

    a = [
        [1,2,3,4],
        [4,5,6,2],
        [7,0,5,2],
        [11,10,7,9]]

    解题思路如下:

    step1:先找出每行的最大值,及其index,输出最大值,即所在行和列作为要给list存如result列表中,函数写法如下:

    def find_saddle_max_point(s):
        result =[]
        #用result存储每行最大值以及其index
        for i in range(len(s)):
            #遍历次数,即一共有多少个行,如例子中一共有4行,该值等于a的元素个数
            max =s[i][0]
    #设定每行的最大值为第一个
            location =[]
    #新建一个location列表来存储该值在外层的index和内层的index
            index=0
    #设定最大值所在的列的index值为0
            for j in range(len(s[i])):           
                #遍历每行的每个值
                if s[i][j]>max:
                    max = s[i][j]
                    index =j
    #找出最大值以及最大值所在列,即j的值
            location.append(i)
            location.append(index)
    #存入横向列表坐标和纵向坐标值
            result.append((max,location))
    #将最大值及所在的location(包括横向坐标和纵向坐标)存如result中
        return result
    print(find_saddle_max_point(a))

    step2:找出二维矩阵每列最小值,函数写法同step1

    def find_saddle_min_point(s):
        result =[]
        for i in range(len(s[0])):
            #遍历列的次数,如a有4列,列的遍历次数等于a的嵌套列表的长度
            min = s[0][i]
    #设定最小值为每列第一个
            location=[]
            index=0
            for j in range(len(s)):
                #遍历每列的值
                if s[j][i]<min:
                    min =s[j][i]
                    index = j
            location.append(index)
            location.append(i)
    #将每列的最小值所在的index存如location列表中
            result.append((min,location))
    #将每列的最小值以及所在的location存如result中
        return result
    print(find_saddle_min_point(a))

    step3:遍历step1和step2生成的列表,如果有最大值和最小值重复,并且index一样,即2个列表中有重复元素则为二维数组的鞍点

    #step3:如果最小值与最大值重复,并且其index一样,则为鞍点
    def find_saddle(a):
        list1 = find_saddle_max_point(a)
        list2 = find_saddle_min_point(a)
        for i in list1:
            if i in list2:
                return i
        else:
            return False
    print(find_saddle(a))

     

  • 相关阅读:
    展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
    马士兵_JAVA自学之路(为那些目标模糊的码农们)
    Java知识点总结
    解决:对COM组件的调用返回了错误HRESULT E_FAIL
    平差方法
    二进制、八进制、十进制、十六进制之间转换
    解决电脑复选框图标不正确方法
    SQL语句中的Create
    字段的值转换为大小写
    SQL NOW() 函数
  • 原文地址:https://www.cnblogs.com/hyj691001/p/10252327.html
Copyright © 2011-2022 走看看