算法:矩阵鞍点

10.12 求一个矩阵的鞍点,即在行上最小而在列上最大的点。

  思路是:

1. 找出第i行上最小的数

2.检验该数是否是该列上最大的数

 

def saddle_point(arr)
  # arr为m行n列,arr为矩政
  m = arr.length
  n = arr[0].length
  b = []  # 存放每行最小点的行列数组

  for i in 0...m  # 每一行最小的点    
    # 行中找出最小的点
    t = arr[i][0]
    minij = 0
    for j in 1...n
      if arr[i][j] < t
        t = arr[i][j]
        minij = j
      end      
    end
    
    b << [i, minij]
    puts "The row #{i}'s minimum is arr[#{i}][#{minij}]:#{arr[i][minij]}."
  end
  
  # 对数组b处理,b[m][2],b[m][0]:行数,b[m][1]:列数
  c = []
  
  
  b.each do |k|
    row = b[i][0]
		line = b[i][1]
		t = arr[row][line]
		
		# 判断该数是否是该列上最大的数
		flag = 1
		for i in 0...m
		  if t < arr[i][line]
		    flag = 0
		    break
		  end
		end
  
    c << [row, line, t] if flag == 1
  end
  
  c = c.uniq
  
  if c.empty?
    puts "Thers is no saddle point!"
    return
  else
		c.each do |i|
		  row = i[0]
		  line = i[1]
		  t = arr[row][line]
		  puts "arr[#{row}][#{line}]:#{t} is saddle point."
		end
		return c
  end

end

a1 =[[1,2,3,4],[1,5,8,6],[6,4,3,7],[6,3,4,1]]
c = saddle_point(a1)
puts "--------------------------------------"

a2 = [[1,2,3,4],[4,5,6,7],[8,9,10,11],[12,13,14,15]]
c = saddle_point(a2)
puts "--------------------------------------"

关于多个鞍点的,我实在是没有找出例子,不知有没有谁可以给我一个,验证一下。

 

有点难度,花了一个多小时吧。

明天去做新公司的体检,下周一入职。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值