• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Ruby实现的矩阵连乘算法

    动态规划解决矩阵连乘问题,随机产生矩阵序列,输出形如((A1(A2A3))(A4A5))的结果。

    代码:

    #encoding: utf-8
    =begin
    author: xu jin, 4100213
    date: Oct 28, 2012
    MatrixChain
    to find an optimum order by using MatrixChain algorithm
    example output:
    The given array is:[30, 35, 15, 5, 10, 20, 25]
    The optimum order is:((A1(A2A3))((A4A5)A6))
    The total number of multiplications is: 15125
    
    The random array is:[5, 8, 8, 2, 5, 9]
    The optimum order is:((A1(A2A3))(A4A5))
    The total number of multiplications is: 388 
    =end
    
    INFINTIY = 1 / 0.0
    p = [30, 35, 15, 5, 10, 20, 25]
    m, s = Array.new(p.size){Array.new(p.size)}, Array.new(p.size){Array.new(p.size)}
    
    def matrix_chain_order(p, m, s)
       n = p.size - 1
       (1..n).each{|i| m[i][i] = 0} 
       for r in (2..n) do
         for i in (1..n - r + 1) do
           j = r + i - 1
           m[i][j] = INFINTIY
           for k in (i...j) do
             q = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j]                  
             m[i][j], s[i][j] = q, k if(q  m[i][j]) 
           end
         end
       end
    end 
    
    def print_optimal_parens(s, i, j)
       if(i == j) then
        print "A" + i.to_s
       else 
        print "("
        print_optimal_parens(s, i, s[i][j])
        print_optimal_parens(s, s[i][j] + 1, j)
        print ")"
       end
    end
    
    def process(p, m, s)
       matrix_chain_order(p, m, s)
       print "The optimum order is:"
       print_optimal_parens(s, 1, p.size - 1)
       printf("\nThe total number of multiplications is: %d\n\n", m[1][p.size - 1])
    end
    
    puts "The given array is:" + p.to_s
    process(p, m, s)
    
    #produce a random array
    p = Array.new
    x = rand(10)
    (0..x).each{|index| p[index] = rand(10) + 1}
    puts "The random array is:" + p.to_s
    m, s = Array.new(p.size){Array.new(p.size)}, Array.new(p.size){Array.new(p.size)}
    process(p, m, s)
    


    您可能感兴趣的文章:
    • Ruby实现的各种排序算法
    • ruby实现的插入排序和冒泡排序算法
    • Ruby实现二分搜索(二分查找)算法的简单示例
    • Ruby实现的3种快速排序算法
    • Ruby实现的合并排序算法
    • Ruby实现的最优二叉查找树算法
    • Ruby实现的图片滤镜算法代码
    上一篇:Ruby实现的合并排序算法
    下一篇:Ruby实现的各种排序算法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Ruby实现的矩阵连乘算法 Ruby,实现,的,矩阵,连乘,