web-dev-qa-db-ja.com

「アルゴリズムの標準的なステートレス機能ビュー」とはどういう意味ですか?

SedgewickおよびWayneによるアルゴリズム(第4版)に関するケルビンマーフィーのレビュー

データ構造の場合、クラスを使用するのは当然のことですが、クラスも多くのアルゴリズムにこのアプローチを採用しています。グラフ処理のもの。これにより、アルゴは前処理を実行して内部状態を保存し、呼び出し元にサービスを提供できます。これは、アルゴリズムの標準のステートレス機能ビューよりも一般的です。

  • 「アルゴリズムのステートレス機能ビュー」とはどういう意味ですか?

  • 私がいくつかのアルゴリズムの本から読んだビューは、オブジェクトの状態に基づいています。だから私はアルゴリズムの標準的な見方は状態に基づいていると思います、正しいですか?

ありがとう。

6
Tim

「アルゴリズムのステートレス機能ビュー」とはどういう意味ですか?

抽象のアルゴリズムは、特定の入力を取り、特定の出力を生成するメカニズムの説明と考えることができます世界の状態とは無関係。 2と3を取り込んで5を生成する「合計」と呼ばれるメカニズムがある場合、月の位相や今日のフランスの王者に関係なく、2と3が与えられると常に5を生成します。アルゴリズムが引数として提供される値以外に参照する必要がある「状態」はありません。

著者が描いている違いは、この点で「純粋」なアルゴリズムであっても、いくつかの前処理を行い、それを状態として保存し、アルゴリズムの操作中にその状態を使用すると便利な場合が多いことです。 resultが世界の状態に依存していないように見えるアルゴリズムであっても、内部的にはそれ自体の状態のプライベートユニバースを消費または変更しています。

アルゴリズムの標準的な見方は状態に基づいていると思いますよね?

アルゴリズムの標準的なビューOOまたは手続き型言語は状態への一連の変異です、しかし、それは標準ではありませんfunctionalビュー:機能ビューでは、アルゴリズムには入力に依存する出力があり、変更可能な状態はありません。

ステートフルアルゴリズムをステートレスアルゴリズムとして記述することは常に可能です。状態をアルゴリズムへの入力の1つにして、出力に状態への「変更」のコピーを含めるだけです。実際には何も変異していません。しかし、実際にそうすることは、多くの場合、不便、非能率的、または非パフォーマンス的です。

もちろん、その逆も当てはまります。一連のミューテーションとして記述されている多くのアルゴリズムは、ミューテーションが一貫していないか、順序が正しく行われていない厄介なバグに対して脆弱です。アルゴリズムをミューテーションのない入力からの値の生成として再考することで、多くの場合、パフォーマンスを大幅に向上させ(永続化、メモ化などのおかげで)、バグの原因を取り除くことができます。

13
Eric Lippert