手机
当前位置:查字典教程网 >编程开发 >编程语言综合 >Ruby实现的最优二叉查找树算法
Ruby实现的最优二叉查找树算法
摘要:这篇文章主要介绍了Ruby实现的最优二叉查找树算法,本文直接给出实现代码,需要的朋友可以参考下算法导论上的伪码改写而成,加上导论的课后练习第...

这篇文章主要介绍了Ruby实现的最优二叉查找树算法,本文直接给出实现代码,需要的朋友可以参考下

算法导论上的伪码改写而成,加上导论的课后练习第一题的解的构造函数。

代码如下:

#encoding: utf-8

=begin

author: xu jin

date: Nov 11, 2012

Optimal Binary Search Tree

to find by using EditDistance algorithm

refer to <>

example output:

"k2 is the root of the tree."

"k1 is the left child of k2."

"d0 is the left child of k1."

"d1 is the right child of k1."

"k5 is the right child of k2."

"k4 is the left child of k5."

"k3 is the left child of k4."

"d2 is the left child of k3."

"d3 is the right child of k3."

"d4 is the right child of k4."

"d5 is the right child of k5."

The expected cost is 2.75.

=end

INFINTIY = 1 / 0.0

a = ['', 'k1', 'k2', 'k3', 'k4', 'k5']

p = [0, 0.15, 0.10, 0.05, 0.10, 0.20]

q = [0.05, 0.10, 0.05, 0.05, 0.05 ,0.10]

e = Array.new(a.size + 1){Array.new(a.size + 1)}

root = Array.new(a.size + 1){Array.new(a.size + 1)}

def optimalBST(p, q, n, e, root)

w = Array.new(p.size + 1){Array.new(p.size + 1)}

for i in (1..n + 1)

e[i][i - 1] = q[i - 1]

w[i][i - 1] = q[i - 1]

end

for l in (1..n)

for i in (1..n - l + 1)

j = i + l -1

e[i][j] = 1 / 0.0

w[i][j] = w[i][j - 1] + p[j] + q[j]

for r in (i..j)

t = e[i][r - 1] + e[r + 1][j] + w[i][j]

if t < e[i][j]

e[i][j] = t

root[i][j] = r

end

end

end

end

end

def printBST(root, i ,j, signal)

return if i > j

if signal == 0

p "k#{root[i][j]} is the root of the tree."

signal = 1

end

r = root[i][j]

#left child

if r - 1< i

p "d#{r - 1} is the left child of k#{r}."

else

p "k#{root[i][r - 1]} is the left child of k#{r}."

printBST(root, i, r - 1, 1 )

end

#right child

if r >= j

p "d#{r} is the right child of k#{r}."

else

p "k#{root[r + 1][j]} is the right child of k#{r}."

printBST(root, r + 1, j, 1)

end

end

optimalBST(p, q, p.size - 1, e, root)

printBST(root, 1, a.size-1, 0)

puts "nThe expected cost is #{e[1][a.size-1]}."

【Ruby实现的最优二叉查找树算法】相关文章:

Ruby实现的各种排序算法

Ruby实现的最优二叉查找树算法

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

python实现批量改文件名称的方法

Ruby实现的合并排序算法

Java基于socket服务实现UDP协议的方法

Python实现简单截取中文字符串的方法

python简单实现计算过期时间的方法

python实现的简单抽奖系统实例

python实现查找excel里某一列重复数据并且剔除后打印的方法

精品推荐
分类导航