No.1ベストアンサー
- 回答日時:
#Wikipediaの「二分ヒープ - ヒープ操作」を参考に作ってみた。
#「upheap/downheap操作は次のような配列の点から説明できる。」以下は読んでも良く解らなかった。
#最初は配列だけにしていたが、追加操作や削除操作を持つクラスの方がわかりやすそうだったのでクラスにしました。(ループ変数の変数名がiからじゃなくてjからになっているのはその名残り)
#速度や計算量の測定はしていません。
class BinaryTree
def initialize
@array = []
end
def size
@array.size
end
def add(val)
if @array.size == 0
@array.push(val)
else
@array.push(val)
j = @array.size - 1
while j > 0
if @array[((j - 1) / 2).floor] > @array[j]
@array[j],@array[((j - 1) / 2).floor] = @array[((j - 1) / 2).floor], @array[j]
else
break
end
j = ((j - 1) / 2).floor
end
end
val
end
def remove
temp = @array.shift()
if @array.size != 0
@array.unshift(@array.pop())
j = 0
while 2 * j + 1 < @array.size
if 2 * j + 1 == @array.size - 1
minimum = 2 * j + 1
else
if @array[2 * j + 1] > @array[2 * j + 2]
minimum = 2 * j + 2
else
minimum = 2 * j + 1
end
end
if @array[minimum] >= @array[j]
minimum = j
end
@array[minimum],@array[j] = @array[j],@array[minimum]
if j == minimum
break
else
j = minimum
end
end
end
temp
end
def arr
@array
end
end
hoge = BinaryTree.new
myarray = [12,11,13,19,15,8,7,10]
while myarray.size != 0
p hoge.add(myarray.shift())
end
print "---\n"
p hoge.arr
print "---\n"
while hoge.size != 0
p hoge.remove()
end
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSSのhtmlへの紐付けについ...
-
ビーリアルのユーザー名を変え...
-
100万件越えCSVから条件を満た...
-
a=2, b=1のとき”x=(a-b+3)%3”の...
-
一週間用のカレンダー
-
Ruby require ライブラリー
-
ruby OpenURI::Meta
-
ruby while式
-
ruby loopメソッド 変数(再喝)
-
ruby 配列
-
ruby loopメソッド 変数
-
ruby クラス・オブジェクト・イ...
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
ruby begin句
-
ruby ensure句
-
ルビー言語 ライブラリー(再々...
-
ルビー言語 csvファイル 続き(...
-
ルビー言語 csvファイル 続き
-
ルビー言語 ライブラリー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
What class are you in? には何...
-
class roomとclassroom どちら...
-
pythonのerrorコード
-
HSTLやSSTL等のI/Oピン
-
テンプレートの特殊化でコンパ...
-
クラス名やモジュール名の競合...
-
プログラミングRubyについての...
-
syntax error 一行で書くと
-
Visualurubyのラジオボタンにつ...
-
【delphi】クラスの継承、互換...
-
【ruby】【文法】スパークラス...
-
【ruby】クラスCGIを改造して、...
-
【ruby】特異クラスを使って,Fi...
-
変数の隠蔽とは?
-
Rubyの質問です
-
Rubyの正規表現を引数に
-
No route matches [GET] "/post...
-
住所の追加について
-
「arg」は何の略?
-
教えてください。vb5.0
おすすめ情報