2017-01-01から1年間の記事一覧
ポイント ・再帰検索時の検索結果の格納 再帰を用いた検索で、各末端での検索結果を最上段の関数に返す場合は、基本的にreturnを使用して値の返しを行う。 def foo(x): if x > 100: return x else: return x + foo(x + 1) しかし、ひとつの関数で複数の結果…
ポイント keyでFunctionを指定する際に、初期入力がNoneの時の対象法 Key指定時の注意点 pythonにおいてmax(a, key=function)など、基準として関数を指定することが可能。 このような関数を独自で実装するとき、key指定がない場合のfunctionをどうするかが問…
今回のポイント MaxはKeyにFunctionを指定することが出来る。指定されたFunctionは最大値算出時にMapのように一つずつ値を算出し、比較をしすることで最大値を算出する。 例 def poker(hands): "Return the best hand; poker([hand, ...]) => hand" return m…
はじめに Design of Computer ProgramsのLesson1-3についてまとめる。 ここでの目標 今回作成するのは、ポーカーの手札を複数引数として取り込んで、そのなかから一番いい手を返すプログラム。
はじめに Dependency Injectionについて自分なりにまとめてみる。 (Dependency Injection コンテントにつていは記述していません。) 修正箇所があれば、Updateをしていく。 そもそも Dependency Injection(DI)をWikiで調べてみると… コンポーネント間の依存…
目次 問題の説明 ポイント ソース 問題の説明 PouringProblemの拡張版を今回は作成する。 前回の(PouringProblem)jsakusan.hatenablog.comは、2つの容器を使用した場合で解決方法を探索した。 しかし、今回は容器の数をフレキシブルに変化可能にする。 容器…
引数の値に応じて、関数を指定したい時のコードの書き方の話。 下記の様なコードがあった場合、 def mc_problem(start=(3, 3, 1, 0, 0, 0), goal=None): if goal == None: goal_fn = lambda state: (0, 0, 0) == state[:3] else: goal_fn = lambda state: go…
下記の定義のようなTupleがあり、最後から2眼目のtotal_costが欲しい。 この場合、一旦変数にいれてやると、可読性が上がる。 tupleの定義 path = [state, (action, total_cost), state, ....] コード def path_cost(path) if len(path) < 3: return 0 else…
目次 問題のイメージ 実装 問題のイメージ 良くありがちな、二つの容器を使用して特定の分量を測定してくださいという問題。 問題を解く方向性としては、探索問題となる。 既に探索した領域を記憶し、新たな領域を探索するイメージ 実装 def pour_problem(X,…
目次 Inverse Functionとは 実装 逆算法 2分探査 Inverse Functionとは まずは、関数の定義から見てみる。 あるy = f(x)に対して、xを求めるようなf'(y)のことである。 ex) f(x) = x ** 2 f'(x) = sqrt(y) こんな関数を実装していく。 実装 逆算方 f(x)を0…
目次 これまでに作成したデコレータ Trace Tool これまでに作成したデコレータ DEBUGGING TOOL countcall trace <- New!! PERFORMANCE TOOL memo EXPRESSION TOOL n_ary Trace Tool 関数の実行のされ方がVisualizeされるデコレータ。 --> fib(6) --> fib(5) …
目次 MEMO化について MEMOのデコレータ Hash TableにListは入れられない?? MEMO化について C101においても、プログラムの高速化にメモ化を使用する場面があった。コードは下記のようである。 memo = {} def fib(n): if n in memo: return memo[n] else: me…
複数代入とは下記のようなことを言っているつもりです。 >>a, b = 1, 2 >>a 1 >>b 2 複数の変数に一行の式で代入が行えること。 スワイプが一行で書ける!! int a = 1; int b = 2; int temp = a; a = b; b = temp; System.out.print(a + "," + b) と記述す…
Pythonプログラムのメモリ使用方法(初級)をurseraの講座で解説していたので、メモしておく。 使用サイト ・ Python Tutor - Visualize Python, Java, JavaScript, TypeScript, Ruby, C, and C++ code execution -> リアルタイムでメモリの使用状況が分かる…