プログラミング 【動的計画法】ロッド切り出し問題 12月、1月はCODEVS4に集中してたり、2月はうわおえを更新してたりで、アルゴリズムイントロダクションを勧められていなかったが再開! 動的計画法を解説している書籍やサイトでは、ナップザック問題を取り上げている場合が多い気がする。 でも... 2015.03.03 プログラミング
プログラミング rubyの2分探索木実装 理屈は知っていても、なかなか自分で実装することはないであろう2分探索木を実装する。 class BinaryTree attr_accessor :root def initialize self.root = nil... 2014.12.12 プログラミング
プログラミング バケツソートをRubyで バケツソート、これは内部で使っている挿入ソート部分以外で比較をしないソート。 なんかwikipediaのバケツソートのページを見ると、計数ソートと同じだとか、計数ソートのコードや図が乗っているという無茶苦茶な状態なので、英語版のwikipe... 2014.11.16 プログラミング
プログラミング rubyで計数ソート バブルソート、挿入ソート、選択ソート、ヒープソート、マージソート、クイックソート、ノームソートなどなどなどなど、、 これらはソートの為に値と値を比較するで、ある一定の計算量は必要になっています。 が、スリープソート、計数ソート、基数ソート... 2014.11.09 プログラミング
プログラミング [ruby] ヒープソート実装 ヒープソートも書いた。 配列 a[] を下の図のように使えば、ヒープを表すことができるため、ヒープの実装には配列を使う。 子の添字を取得することも用意で、左の子は添字 * 2 + 1、右の子は添字 * 2 + 1で求めることができる... 2014.10.28 プログラミング
プログラミング [Ruby] 最大部分配列問題を解く 最大部分配列問題。 配列内のある部分を足しあわせたとき、その合計が最大化する部分を探す問題。 例えば配列 があったときに、足しあわせた合計が最大になる部分は、添字1〜4の。要素の合計は15になる。 分割統治法を利用して解くことになる。... 2014.10.19 プログラミング
プログラミング RubyのArrayのcombination 集合の組み合わせを全探索する場合、組み合わせをビット演算で実現することがあると思う。 C++でdataの組み合わせを全て列挙する例と実行結果を載せる。 #include <iostream> #define N 4 int... 2014.10.13 プログラミング
プログラミング Ruby マージソート実装 今回はArrayクラスに組み込んだ。 Rubyでは配列外アクセスはnilが帰るだけなので、番兵じゃなくても良い気がするが、ここはセオリーに従い実装。 class Array def merge_sort!(s = 0, e = siz... 2014.10.07 プログラミング
プログラミング Ruby 挿入ソート実装 今回は挿入ソートの実装。 ソート周りは、Rubyらしく書いている以下の記事もあるけど、本記事ではアルゴリズムの手順そのままRubyで書く。。。え、C使えよって? で実装はこれ a = 1.upto(a.size-1) do |i|... 2014.10.06 プログラミング
プログラミング [Ruby] ワーシャルフロイド法 名前も実装もかっこいいアルゴリズムのワーシャルフロイド法をrubyで実装する。 重み付きで有向な、しかもコストが正の場合に、全点間の最小コストを非常に簡潔にかくことができるもの。 INF = 9999999.freeze nodes_... 2014.09.29 プログラミング