アルゴリズムと計算量 (2): ユークリッドの互除法,フィボナッチ数の計算


今日の内容


最大公約数を求めるアルゴリズムの評価

素朴なアルゴリズムとユークリッドの互除法の評価

def gcd_s_bench(x,y)
  times = 0
  if x > y
    n = y
  else
    n = x
  end
  for k in 1..n
    if x % k == 0 && y % k == 0
      ans = k
    end
    times = times + 1
  end
  times
end

[演習 7.1]

[問題 7.1]

[演習 7.2]

  1. 数 x, y を変えながら,関数 gcd_s_bench(x,y), gcd_bench(x,y) の値を比較し,ユークリッドの互除法の方が計算が少ないことを確認しなさい.
  2. x = 144, y = 89 のときに gcd_bench(x,y) を求めなさい.
  3. 上記で,x, y を少しずつ変えて計算回数が急に変わることを確認しなさい.

[問題 7.2]


フィボナッチ数の計算

[問題 7.3]


ベキ乗計算のアルゴリズム

[問題 7.4]

  1. n の k 乗を n を単純に k 回掛けて計算する関数 power1(n, k) を作りなさい.
  2. n の k 乗をもっと効率よく計算する関数 power2(n, k) を作りなさい.
  3. 関数 power1(n, k) を基に,計算の繰り返し回数を返す関数 power1_bench(n, k) を作りなさい.
  4. 関数 power2(n, k) を基に,計算の繰り返し回数を返す関数 power2_bench(n ,k) を作りなさい.

[問題 7.5]


来週の予告


2012年11月3日作成
2012年11月9日改訂
伊知地 宏
Copyright (C) Hiroshi Ichiji, 2012. All rights reserved.