プログラミングの問題はすべてアルゴリズムの問​​題ですか?[閉まっている]


13

Cormenらによる「アルゴリズムの紹介」が好きです。知識を伝えます。1つの理由は、すべてがプログラミングの問題に関係しており、本が特定のプログラミング言語で実装されていないことです。この言語の独立性は、一般的なアイデアに焦点を当てています。

ですから、私の質問は、タイトルにあるとおりです。このアルゴリズム的な方法で考えることで、すべての解決可能なプログラミング問題を解決できます。どの言語、分野などに関係なく?はいの場合、引数を指定し、そうでない場合、引数を指定します!

GUI、AI、グラフィックスなどを使用して、多くの複雑なプログラムを実装していません。しかし、これらのタイプの問題は、優れたアルゴリズムを考えることの問題でもありますか?


6
プログラマーの最も一般的な問題は、「ああ、それはあなたが何を意味していたのですか?今では理解しています。しかし、私が実装したものではありません、申し訳ありません」。それはプログラミングの問題ですか?
ケプラ

1
この質問 は非常に似ています。
back2dos

クライアントとレポートを作成し、その要件を説明し、それに基づいてソフトウェアを設計、テスト、実装、リファクタリング、最適化、および保守する必要があります。ソフトウェアをテスト、開発、展開、実行、測定する環境が必要です。このシステムでは、個々のアルゴリズムは実装の詳細にすぎません。
inf3rno 14

@Keppla(プラスワン)OPEは、それが必要条件の問題、すべてのソフトウェアの悲哀の根本的な原因だ
Mawgはモニカ回復言う

回答:


29

「プログラミング問題」の定義方法によって異なります。

実際のプロジェクトでは、答えは間違いなく明確です。問題のほとんどは技術的な問題でさえありませんが、通信の問題、不明確な要件などです。

次に、アルゴリズムをほとんど必要としない問題クラスの主題全体があります。たとえば、GUIは多くの場合「プログラミング」するのが簡単ですが、実際の問題は(グラフィカルな外観だけでなく、使いやすさの観点から)優れたデザインを持つことです。

いくつかのフィールドがありますが、問題はそのフィールドの性質によりはるかにアルゴリズム的である傾向があります。たとえば、AIは主要な主題であり、アルゴリズムが核となっています。グラフィックスはアルゴリズムを集中的に使用できますが、「グラフィックスプログラミング」の正確な意味に依存します。

一般的に、プログラムで解決しようとしている問題が数学的表現に適している場合、アルゴリズム領域に入ります。もちろん、これは大まかな指標に過ぎません。ほとんどすべての数学モデルを作成できるからです。しかし、ほとんどの場合、通常はそうすることを検討しません。

最後の例:問題がビジネスオブジェクトのデータを入力できるGUIを作成することである場合、数学的な定式化についてはあまり考えないでしょう。ただし、ある重要度の値に基づいて要素を動的に変更および再配置するGUIを作成することが問題である場合、数学モデルとアルゴリズムの実装になる可能性が非常に高くなります。


2
どうやら、それは「アルゴリズム」の定義方法にも依存します。新しいアルゴリズムを必要とする問題はほとんどありませんが、コンピュータープログラムにはアルゴリズムとデータ構造の2つの部分しかないため、すべての問題には、たとえそれらのアルゴリズムが些細であっても、いくつかのアルゴリズムが必要です。アルゴリズムは数学的モデルではなく、一連の命令です。
哲学者

それはその最も厳密な意味では真実ですが、私は、1 i++つには、私たちの新しいオーバーロード.. erm ..アルゴリズムとして受け入れません。
フランク

しかし、加算について知らなかった場合はどうでしょう。その後、加算の導入は、アルゴリズムの研究に大きな革新をもたらすでしょう!ますます複雑なアルゴリズムに出会う​​まで続きます。
CMCDragonkai 14年

8

プログラミングの問題とはどういう意味ですか?

ウィキペディアによると:

コンピュータープログラミング(多くの場合、プログラミングまたはコーディングに短縮)は、コンピュータープログラムのソースコードを設計、作成、テスト、デバッグ、および保守するプロセスです。

つまり、一般的なプログラミングは、コードを介してアルゴリズムを変換するよりも本質的に大きくなります。

例を挙げると、私が今抱えているプログラミングの問題は、単体テストを追加してリファクタリングすることで、従来のスパゲッティソースコード処理する必要があるということです。また、適切な場所にコメントを追加したり、名前の大文字化などを正規化したりします。アルゴリズムとは何の関係もありません。

同様に、多くの開発者のタスクはアルゴリズムとは無関係です。例:国際化。同様に、多くのアプリケーション(CRUDなど)は、ソースコードでアルゴリズムをあまり使用しません(フレームワークの基礎となるコードについては話しません)。

さて、「プログラミング問題」で「プログラミング」はコードを介したアルゴリズムの翻訳の同義語であると仮定している場合、そう、論理的に問題はアルゴリズムの問​​題になります:A × n = B × nif A = B


タスク問題には違いがあります。あなたの問題は、ユニットテストを追加したり、レガシーコードを維持したりすることではなく、コードベース内に存在する問題の解決策であり、コードがアルゴリズムで表すプログラムの動作そのものではありません。
zxcdw

説明したように、タスクはプログラムの動作を変更しません。おそらく、他のいくつかの変更の準備作業であり、アルゴリズムに関係する場合と関係ない場合があります。作業コードを1日中リファクタリングするためだけに、誰にも報酬が支払われるとは思わない。
MarkJ

6

私は答えは断固としてノーだと思います。アルゴリズムは、はるかに大きなスキルセットのビルディングブロックです。

AIに特化したCSの学位を取得しました

そこで少なくとも根本的な問題は、少なくとも私が見たように、情報の適切な表現を見つけることでした。これらの表現は、人々の頭の中にある知識構造とよく一致するように努め、それらに対して行われる種類の操作と変更を促進する必要があります。

日常的なプログラミングの観点から見ると、これは、基本的な問題が、現在の状況に適したドメイン固有言語(DSL)を識別することであることを意味します。DSLを作成するには多くの方法があります。クラス、変数、およびメソッドが定義されている通常のプログラミングは、実際にはDSLを作成します。これにより、それなしでは言えないことを言う(精神構造をコードにマップする)ことができるからです。

アルゴリズムも重要ですが、それらはストーリーの一部にすぎません。


5

あなたはすべてのコンピュータープログラムがアルゴリズムであると言うことができると思います、なぜならあなたは望ましい結果を達成するために一連の命令を処方しているからです。ただし、最も難しい問題の一部は、プログラムをコンピューターに伝えることではなく、ソフトウェアをテストおよび変更する人間にプログラムを伝えることです。

つまり、コンピューターは、コードが人間にとって完全に理解不能であるかどうかは気にしません。どちらの方法でも問題なく実行できます。課題は、バグが親指のように目立つようにコードを十分に明確にすることです。

興味深いことに、私が大学でアルゴリズムについて学んだ技術的なことは、それ以来、私が独学で学んだことによって長い間隠されてきました。この時点で、私が仕事で私を助けるために第3大学の学位を取得したい場合、それは英語の作文になります。


2

プログラミングの問題のほとんどは、実際にはシステム管理の問題です。

それはちょっとした答えですが、私はこれが予想よりも頻繁に真実であることがわかりました。DNSがテストマシンで誤って設定されていて、CPU /メモリ/ポートを大量に消費する古いプロセスがまだ実行されているため、プログラムが間違ったユーザーIDで実行されているため、失敗した回数がわからないパーミッション、ディスクが誤ってパーティション分割されたため、スペースが不足した、間違ったバージョンの構成ファイルがインストールされたなど

アルゴリズムを正しくすることは、通常、問題のほんの一部です。問題の残りは、現実世界の実際の問題を解決するためにプログラムを動作させることです。


「アルゴリズムを正しくすることは、通常、問題のほんの一部にすぎません」kaggle.comの問題は、その説明に当てはまりません。
ガンダルフ

同意します、私はそれらを「配管」カテゴリに入れただけです。他のプログラマーのサービス、API、そして時にはフレームワークと連携することは、他の誰かが彼らが働くべきだと思ったように物事を結び付けるだけです。
ジェフ14年

2

はい、すべてのプログラミングの問題はアルゴリズム的に考えることで解決できると思います。結局のところ、アルゴリズムはコンピューターに何をすべきかを指示する一連の命令にすぎません。

上記の例をいくつか取り上げます

たとえば、GUIは多くの場合「プログラミング」するのが簡単ですが、実際の問題は(グラフィカルな外観だけでなく、使いやすさの観点から)優れたデザインを持つことです。

ユーザーフレンドリーで効率的な効果的なGUIデザインにつながるパターン/ルールを知っているプログラミングやデザインの面でも。これらのルールは、従うとユーザーフレンドリーなGUIを作成するのに役立つアルゴリズムに縮小されます。実際、GUIにコントロールを配置する実際の手順は、アルゴリズムに減らすこともできます。

例を挙げると、私が今抱えているプログラミングの問題は、単体テストを追加してリファクタリングすることで、従来のスパゲッティソースコードを処理する必要があることです。また、適切な場所にコメントを追加したり、名前の大文字化などを正規化したりします。アルゴリズムとは何の関係もありません。

ただし、単体テストを追加する方法は、次のようなアルゴリズムで説明できます。

  1. 新しい単体テストを特定する
  2. 単体テストの書き込み
  3. 大文字の正規化アルゴリズムを適用
  4. コメントアルゴリズムを適用

例:国際化これは、アルゴリズムソリューションの完璧な例です。最も簡単な方法として、辞書で既知の単語を検索し、別の言語形式に置き換えます。(もちろん、実際の生活には文章と文脈が関係し、アルゴリズムにはネイティブスピーカーと確認する手順が含まれる場合がありますが、基本は当てはまります)

はいの答えのほとんどの問題は、問題の冗長で曖昧な説明を明確に定義されたロジック/ルールのセットに減らす命令セットではなく、QuickSort、バブルソートの観点からアルゴリズムを考えていることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.