校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識(shí)庫(kù) > Ruby實(shí)現(xiàn)的最優(yōu)二叉查找樹算法

Ruby實(shí)現(xiàn)的最優(yōu)二叉查找樹算法

熱門標(biāo)簽:高德地圖標(biāo)注客服 白銀外呼paas系統(tǒng) 百度地圖標(biāo)注自定義圖片 徐州網(wǎng)絡(luò)外呼系統(tǒng)哪個(gè)好 地圖標(biāo)注賺錢項(xiàng)目注冊(cè) 常德電銷平臺(tái)外呼系統(tǒng)軟件價(jià)格 電銷機(jī)器人廠商代理 滴滴外呼系統(tǒng) 湖州u友防封電銷卡

算法導(dǎo)論上的偽碼改寫而成,加上導(dǎo)論的課后練習(xí)第一題的解的構(gòu)造函數(shù)。

復(fù)制代碼 代碼如下:

#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實(shí)現(xiàn)的各種排序算法
  • ruby實(shí)現(xiàn)的插入排序和冒泡排序算法
  • Ruby實(shí)現(xiàn)的矩陣連乘算法
  • Ruby實(shí)現(xiàn)二分搜索(二分查找)算法的簡(jiǎn)單示例
  • Ruby實(shí)現(xiàn)的3種快速排序算法
  • Ruby實(shí)現(xiàn)的合并排序算法
  • Ruby實(shí)現(xiàn)的圖片濾鏡算法代碼

標(biāo)簽:三沙 遼寧 荊門 普洱 張家界 公主嶺 永州 梧州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Ruby實(shí)現(xiàn)的最優(yōu)二叉查找樹算法》,本文關(guān)鍵詞  Ruby,實(shí)現(xiàn),的,最優(yōu),二叉,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Ruby實(shí)現(xiàn)的最優(yōu)二叉查找樹算法》相關(guān)的同類信息!
  • 本頁收集關(guān)于Ruby實(shí)現(xiàn)的最優(yōu)二叉查找樹算法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 荃湾区| 辽宁省| 井冈山市| 仁布县| 辽宁省| 长春市| 元谋县| 武汉市| 余江县| 抚远县| 凌云县| 富川| 家居| 敦化市| 辽宁省| 岳普湖县| 广平县| 丹江口市| 万源市| 苍梧县| 黄龙县| 通州区| 鹿邑县| 大邑县| 荣昌县| 大港区| 葵青区| 鄯善县| 偃师市| 沙雅县| 呼图壁县| 博白县| 抚顺市| 甘肃省| 若羌县| 华坪县| 华蓥市| 广丰县| 开原市| 河津市| 临朐县|