タグ

ProgrammingとAlgorithmに関するmickey24のブックマーク (4)

  • O(log n)でフィボナッチ数を求める - 趣味的にっき

    O(log n)でフィボナッチ数のN番目を求める方法をRubyで実装してみました。この間のSICP勉強会で教えてもらったやつです。 まず普通のフィボナッチ数。こいつはO(n)です。 def fib1(n) a, b = 0, 1 n.times do a, b = a + b, a end a end O(log n)版のフィボナッチ数。なんでこれでフィボナッチ数が求められるかは、ここを参照してください。ちなみにRubyのMatrixの**は、O(log n)で実装されています。 require 'matrix' def fib2(n) a = Matrix[[1, 1], [1, 0]] b = Matrix[[0], [1]] (a ** n * b)[0, 0] end こんな感じでベンチマークをとってみました。 require 'benchmark' n = 100_000 Ben

    O(log n)でフィボナッチ数を求める - 趣味的にっき
    mickey24
    mickey24 2008/10/15
    行列のn乗がO(log n)で計算できることを利用するとな。
  • Spaghetti Source - 各種アルゴリズムの C++ による実装

    ACM/ICPC(プログラミングコンテスト)系列の問題を解くことを目標にして,各種アルゴリズムを C++ で実装してみた.極めて意地が悪い類の問題には対応していないし,特定の入力に対して高速に動くということもない.計算量も最良とは限らない. これらを参考にする方への注意とお願い: これらの記述は正確とは限りません.参考文献を参照することを強く推奨します.間違っている場合は是非教えてください. これらのプログラムは間違っているかもしれません.各人で検証することを強く推奨します.バグがあれば是非教えてください. 分類が怪しいので,これはこっちだろう,ということがあればコメントを下さると助かります. 注意! 現在書き換え中 TODO 分類を正しく行う. 全体的に説明と使い方を詳しく. Verify していないものを Verify. ボロノイ図(いつになることやら……) 基 テンプレート グラフ

    mickey24
    mickey24 2008/08/28
    ICPCで使えるアルゴリズムのC++による実装を紹介している。
  • 平面幾何におけるベクトル演算 » ソースコード

    テキスト「平面幾何におけるベクトル演算」で使用したソースコードを全て掲載します。 ICPCではWebは参照できないので印刷しておきましょう。:-) #include <complex> using namespace std; typedef complex<double> P; // 許容する誤差ε #define EPS (1e-10) // 2つのスカラーが等しいかどうか #define EQ(a,b) (abs((a)-(b)) < EPS) // 2つのベクトルが等しいかどうか #define EQV(a,b) ( EQ((a).real(), (b).real()) && EQ((a).imag(), (b).imag()) ) // ベクトルaの絶対値を求める double length = abs(a); // 2点a,b間の距離を求める double distance

    mickey24
    mickey24 2008/06/28
    complex<double>を使った平面幾何のプログラム例。
  • ALGORITHM NOTE

    X×Y個のセルから成るグリッド上のスタート地点から出発し、全5種類のパチクリ(生物)を捕まえた状態でゴール地点まで行く最短コストを求める問題です。各パチクリはそれぞれ、火、氷、木、土、水の属性を持ち、火のパチクリは氷のパチクリを捕まえることができ、氷のパチクリは木のパチクリを捕まえることができ、といったように火→氷→木→土→水→火というような属性の関連があります。スタート地点で最初に持つパチクリを1つ選ぶことができます。グリッドのサイズx, y はそれぞれ2以上1000以下で、各属性のパチクリの数はそれぞれ0以上1000以下です(全体の数は5000以下)。 最初に1つのパチクリを選んだ後のパチクリを捕まえる順番は、上記属性の関連の順番になります。例えば最初に火の属性をもつパチクリを持っていれば、氷、木、土、水の属性をもつパチクリを順番に捕まえてゴールに行けばよいので、下図に示すDAG(Di

    mickey24
    mickey24 2008/06/02
    ICPCで使うアルゴリズムの紹介がメイン。図を使って解説しているので分かりやすい。
  • 1