Pythonの古典的なアルゴリズム

アルゴリズムの実装###

#0 GitHub

https://github.com/Coxhuang/Python-DataStructure

#1 周囲##

Python3.7.3

#2 開始##

#2.1 フィボナッチシーケンス###

  1. GitHub

[ GitHubコード](https://github.com/Coxhuang/Python-DataStructure/tree/master/1.Algorithm/3.%E7%BB%8F%E5%85%B8%E7%AE%97%E6%B3 %95 / 1.Fibonacci)

  1. 問題の説明

  2. 法律

  3. コード

def fib(max_val):
 a, b, n =0,1, max_val
 while n:print(a)
  a, b = b, a+b
  n -=1return None
fib(10)

出力

0112358132134
def fib(max_val):
 a, b, n =0,1, max_val
 while n:yield a
  a, b = b, a+b
  n -=1return None
for foo infib(10):print(foo)

出力

0112358132134
def fib(n):if n <2:return n
 returnfib(n-1)+fib(n-2)for foo inrange(10):print(fib(foo))

出力

0112358132134

#2.2 階段を上る###

  1. GitHub

[ GitHubコード](https://github.com/Coxhuang/Python-DataStructure/tree/master/1.Algorithm/3.%E7%BB%8F%E5%85%B8%E7%AE%97%E6%B3 %95 / 2.%E5%8F%B0%E9%98%B6%E9%97%AE%E9%A2%98)

  1. 問題の説明

**カエルは一度に1レベルまたは2レベル(最大2レベル)までジャンプできます。nレベルにジャンプするカエルを見つける方法はいくつありますか? ****

  1. 法律

**ステップが1つしかない場合は、1つの方法しかありません。2つのステップがある場合は、2つの方法があります。Nのステップがあり、最後にN番目のステップにジャンプする場合は、N-2から2つのステップに直接ジャンプできます。ステップ、またはN-1番目のステップから1ステップジャンプするため、Nステップのステップ数は、ステップN-2のメソッド数にステップN-1のメソッド数を加えたもの、つまりS(N )= S(N-1)+ S(N-2)、初期項はS(1)= 1、S(2)= 2で、これはフィボナッチシーケンスに似ていますが、初期項が異なります。 ****

ステップ数 方法
f(0) 0
f(1) 1
f(2) 2
f(3) 3
f(4) 5
f(5) 8

論理法則はフィボナッチシーケンスと一致しています

  1. コード
def fib(max_val):
 a, b, n =0,1, max_val
 while n:
  a, b = b, a+b
  n -=1return b
n =3 #ステップ数
ret = n if n <=2elsefib(n)print(ret)

#2.3 ジャンプステップ(異常ジャンプ)###

  1. GitHub

[ GitHubコード](https://github.com/Coxhuang/Python-DataStructure/tree/master/1.Algorithm/3.%E7%BB%8F%E5%85%B8%E7%AE%97%E6%B3 %95 / 3.%E5%8F%B0%E9%98%B6%E9%97%AE%E9%A2%98%28%E5%8F%98%E6%80%81%E8%B7%B3% 29)

  1. 問題の説明

**カエルは一度に1ステップまたは2ステップまでジャンプできます... nステップまでジャンプすることもできます。カエルがnレベルのステップでジャンプするジャンプ方法の総数を見つけます。 ****

  1. 法律


1ステップジャンプするとき、f(1)=1;2ステップジャンプする場合、f(2)=f(1)+1=2;3ステップジャンプするとき、f(3)=f(2)+f(1)+1=4;4ステップジャンプするとき、f(4)=f(3)+f(2)+f(1)+1=8;f(n-1)=f(n-2)+...+f(2)+f(1)+1f(n)=f(n-1)+f(n-2)+...+f(2)+f(1)+1

説明:

3.1. ここで、f(n)は、nステップが1、2、... nステップであるジャンプの数を表します。
3.2. n = 1の場合、ジャンプ方法は1つだけです。f(1)= 1
3.3. n = 2の場合、ジャンプする方法は2つあります。1つはステップ1または2で、問題(1)に戻ります。f(2)= f(2-1)+ f(2-2)
3.4. n = 3の場合、ジャンプする方法は1番目、2番目、3番目の3つで、最初のステージからジャンプするのは初めてで、残りは次のとおりです。f(3-1); 2番目のステージからジャンプするのは初めて、残りのf (3-2);最初は3ステップで、次にf(3-3)が残っているので、結論は次のようになります。

f(3)=f(3-1)+f(3-2)+f(3-3)

3.5. n = nの場合、nステップのジャンプ、1次、2次... n次があり、結論が導き出されます。

f(n)=f(n-1)+f(n-2)+...+f(n-(n-1))+f(n-n)=>f(0)+f(1)+f(2)+f(3)+...+f(n-1)

3.6. 上記は結論ですが、簡単にするために、引き続き簡単にすることができます。

f(n-1)=f(0)+f(1)+f(2)+f(3)+...+f((n-1)-1)=f(0)+f(1)+f(2)+f(3)+...+f(n-2)f(n)=f(0)+f(1)+f(2)+f(3)+...+f(n-2)+f(n-1)=f(n-1)+f(n-1)

3.7. 最終的な結論を導き出します。nステップに1、2、... nステップのステップがある場合、合計ジャンプ方法は次のようになります。

|1,( n=0)|f(n)=|1,(n=1)||2*f(n-1),(n>=2)
  1. コード
# 再帰-方法1
def jump(n):while n<=2:return n
 returnjump(n-1)*2print(jump(5))

# 再帰-方法2
def jump(n):while n<=2:return n
 return2**(n-1)print(jump(5))

#2.4 ウサギの繁殖###

  1. GitHub

  2. 問題の説明

**ウサギが2匹います。生後3ヶ月目から毎月1匹、小ウサギが3ヶ月目以降毎月1匹出産します。ウサギが死んでいない場合は、毎月ウサギに聞いてください。合計はいくらですか? ****

  1. アイデア

f(N):Nか月のウサギの総数

f(Nbefore):Nか月前に生まれたウサギ

f(新):Nヶ月生まれのウサギ

f(N) = f(Nbefore) + f(Nnew) = f(N-1) + f(Nnew)

f(N+1) = f(Nnew) + f(Nbefore)2 = f(Nnew) + 2f(N-1)

沿って:f(N)=f(N-1)+f(Nnew)f(N+1)=f(Nnew)+2*f(N-1)

取得する:f(N+1)=f(N)+f(N-1)
  1. コード
def fib(max_val):
 a, b, n =1,2, max_val
 while n:
  a, b = b, a+b
  n -=1return b
n =5 #N月
ret = n if n <=2elsefib(n)print(ret)

#2.5 重いリスト###

  1. 時間とスペースの複雑さの制限はありません
def func(tar):
 tar_copy =[]for foo in tar:if foo not in tar_copy:
   tar_copy.append(foo)return tar_copy
ret =func([1,2,2,2,2,3,4,5,6,7,8,9,8,1,2,3,4])print(ret)
O(n)
O(n)
  1. 順序付きリスト+時間の複雑さO(n)+スペースの複雑さO(1)

forループは1つしか存在できないことを意味します+元のテーブルでのみ操作できます

def func(tar):for i,num inenumerate(tar):try: # tar[i+1]最後に例外をスローします
   while num == tar[i+1]:
    tar.pop(i+1)
  except:breakreturn tar
ret =func([1,1,1,2,2,2,2,3,3,4,4,5,6,7,8,8,9,9,9])print(ret)

つづく##

Pythonリスト/辞書の操作時間の複雑さ
https://blog.csdn.net/Coxhuang/article/details/90313828

Recommended Posts

Pythonの古典的なアルゴリズム
Pythonの古典的なインタビューの質問1
Pythonの古典的なインタビューの質問2
Pythonのデータ構造とアルゴリズム
Pythonは平均シフトクラスタリングアルゴリズムを実装しています
FMアルゴリズム分析とPython実装
詳細な並べ替えアルゴリズム(Pythonで実装)
Pythonは10の古典的なソートアルゴリズムを実装しています
python勾配降下アルゴリズムの実装
Pythonの古典的なプログラミングの質問:文字列の置換
Pythonマルチスレッド
Python CookBook
Python FAQ
python言語のアルゴリズムはありますか
Python3辞書
Python3モジュール
python(you-get)
Python文字列
Pythonの基本
Python記述子
Pythonの基本2
Pythonの視覚化| SeabornEconomistの古典的なチャートの模倣
Python exec
Pythonノート
Python3タプル
CentOS + Python3.6 +
Python Advanced(1)
Pythonデコレータ
Python IO
Pythonマルチスレッド
NaiveBayesアルゴリズムとそのPython実装
Pythonツールチェーン
Python3リスト
Pythonマルチタスク-日常
Pythonの概要
pythonの紹介
Pythonアナリティック
Pythonの基本
07.Python3関数
Pythonの基本3
Pythonマルチタスクスレッド
Python関数
python sys.stdout
python演算子
Pythonエントリ-3
Centos 7.5 python3.6
Python文字列
pythonキューキュー
Python推測アルゴリズムの問題の詳細な説明
Pythonの基本4
Pythonの基本5