广州明生堂生物科技有限公司


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

网络编程 Ruby实现的最优二叉查找树算法 06-21

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

#encoding: utf-8

=begin

author: xu jin

date: Nov 11, 2012

Optimal Binary Search Tree

to find by using EditDistance algorithm

refer to <<introduction to algorithms>>

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实现的最短编辑距离计算方法
利用动态规划算法,实现最短编辑距离的计算。#encoding:utf-8#author:xujin#date:Nov12,2012#EditDistance#tofindtheminimumcostbyusingEditDistancealgorithm#exampleoutput:#"Pleaseinputast

Ruby实现的3种快速排序算法
刚学Ruby,正巧算法老师鼓励用不熟悉的语言来写算法,我就用Ruby吧~~话说Ruby可真是超厉害,好多凭直觉的方法都可以用。。。。。无限膜拜中。。。。

Ruby一行代码实现的快速排序
defquick_sort(a)returnaifa.size2(x=a.pop)quick_sort(a.select{|i|i=x})+[x]+quick_sort(a.select{|i|ix}):[]endarray=[72,6,57,88,60,42,83,73,42,48,85]pquick_sort(array)#=[6,42,42,48,57,60,72,73,83,85,88]


编辑:广州明生堂生物科技有限公司

标签:算法,导论,最短,距离,编辑