• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >ruby > Ruby实现的最长公共子序列算法

Ruby实现的最长公共子序列算法

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了南瓜子ruby,ruby,ruby碧玺,ruby woo口红,mac ruby woo口红等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

最长公共子序列,LCS,动态规划实现。

#encoding: utf-8
#author: xu jin, 4100213
#date: Nov 01, 2012
#Longest-Commom-Subsequence
#to find a longest commom subsequence of two given character arrays by using LCS algorithm
#example output:
#The random character arrays are: ["b", "a", "c", "a", "a", "b", "d"] and ["a", "c", "a", "c", "a", "a", "b"]
#The Longest-Commom-Subsequence is: a c a a b

chars = ("a".."e").to_a
x, y = [], []
1.upto(rand(5) + 5) { |i| x << chars[rand(chars.size-1)] }
1.upto(rand(5) + 5) { |i| y << chars[rand(chars.size-1)] }
printf("The random character arrays are: %s and %s\n", x, y)
c = Array.new(x.size + 1){Array.new(y.size + 1)}
b = Array.new(x.size + 1){Array.new(y.size + 1)}

def LCS_length(x, y ,c ,b) 
   m, n = x.size, y.size
   (0..m).each{|i| c[i][0] = 0}
   (0..n).each{|j| c[0][j] = 0}
   for i in (1..m) do
    for j in(1..n) do
    if(x[i - 1] == y [j - 1])
     c[i][j] = c[i - 1][j - 1] + 1;
     b[i][j] = 0
    else
     if(c[i - 1][j] >= c[i][j - 1])
      c[i][j] = c[i - 1][j]
      b[i][j] = 1
     else
      c[i][j] = c[i][j - 1]
      b[i][j] = 2
     end
    end
   end
   end
end

def Print_LCS(x, b, i, j)
  return if(i == 0 || j == 0)
  if(b[i][j] == 0)
    Print_LCS(x, b, i-1, j-1)
    printf("%c ", x[i - 1])
  elsif(b[i][j] == 1)
    Print_LCS(x, b, i-1, j)
  else
    Print_LCS(x, b, i, j-1)
  end
end

LCS_length(x, y, c ,b) 
print "The Longest-Commom-Subsequence is: "
Print_LCS(x, b, x.size, y.size)

</div> </div>

您可能想查找下面的文章:

  • Ruby实现的最长公共子序列算法

相关文章

  • Ruby的XML格式数据解析库Nokogiri的使用进阶
  • 关于Ruby on Rails视图编写的一些建议
  • Ruby中的String对象学习笔记
  • Ruby中XML格式数据处理库REXML的使用方法指南
  • ruby线程实现生产者消费者问题示例(队列Queue实现线程同步)
  • Ruby中require、load、include、extend的区别介绍
  • Ruby中钩子方法的运用实例解析
  • Ruby里4种比较函数(equal?, eql?, ==, ===)详解
  • 详解Ruby当中的算数运算
  • 比较详细的ruby symbol 学习资料

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 编写Ruby代码注释时需要注意的一些问题
    • RVM安装和使用总结笔记
    • Ruby设计模式编程中使用Builder建造者模式的实例
    • Ruby rails 页面跳转(render和redirect_to)
    • rails创建应用程序实例
    • Ruby优化继承类实例
    • rails常用数据库查询操作、方法浅析
    • Ruby设计模式编程之适配器模式实战攻略
    • 介绍Ruby中的模块与混合类型的相关知识
    • ruby的程序结构介绍

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有