コードを書き出すことは依然としてアルゴリズム表現とみなされますか?[閉まっている]
-
06-07-2019 - |
質問
中間試験でアルゴリズムの代わりにコードを書いてしまったため、テストで解答の 50% を失い、A から C に落ちてしまいました。コードを書き出すことは依然としてアルゴリズム表現とみなされますか?
ウィキペディア:アルゴリズム表現 (プログラミングスタイルはほぼ合意に基づいているため)
編集:さて、いくつかの点を明確にさせてください。
テストでは疑似コードが要求されましたが、クラス内で実際に「定義」したことはありませんでした。アルゴリズム用に英語を書き出しただけです。
これは Java クラスであり、ソリューション全体をコメントとともに Java メソッドで書き出しました。これらはすべて手書きであり、疑似コードよりも書き出すのに時間がかかりました。もっと明確になると思いました。
普段はそんなことは問題にしませんが、それは A と C の違いであり、試験には奨学金が付いています。
最後に、私がこの投稿をした理由は 2 つあります。
4.1 現代のプログラミング コミュニティが疑似コードとアルゴリズム表現についてどう考えているかを示したいと思います。
4.2 「現実世界」では何が許容されるのか知りたい;私はしばらくプログラミングをしてきましたが、すぐにオープンソース プロジェクトに貢献できるようになりたいと思っています。また、誰かの足元を踏みたくないのです。(この話題が現実世界で取り上げられる可能性はほとんどないと確信していますが)。
繰り返しになりますが、助け/アドバイスをありがとうございます。
解決
例を挙げてみましょう。コードがアルゴリズムの一部ではない言語固有に重点を置きすぎる場合、当然のことながら、アルゴリズムに非アルゴリズムが混在しており、その結果、誤った結果が生じていると言えます。
その理由には納得できます。学習の要点は、コンセプトを理解していることを示すことであり、かがんで正しいボックスにすべてチェックを入れることではありません。
コンピューターを大学に合格するように教えることはできますが、実際に自分で考えて知識を応用することはまだ教えられません。
食べて吐き出す精神が私が卒業しなかった理由です。
最近のコメントに関しては、疑似コードが未定義であることを認識することが重要です。一般に再利用された用語が含まれていますが、英語と同じように厳密な言語ではありません (そうでなければ、 なれ 逐語的に解析して実行できるプログラミング言語)
の 重要性 擬似コードの肉付けは、 論理 システムの一部であり、「意味がある」という以上に構文について過度に心配する必要はありません。
多くの場合、これにより疑似コードがより複雑になる可能性があります。 簡潔な そして よりわかりやすい。
また、擬似コードは、読者が処理するためにその言語の「魔法の構文」を理解している必要はなく、理解する必要があるのは使用されている用語だけです。
たとえば、平均的な人に Perl のアルゴリズムを与えたとしても、ほとんどの人はラインノイズのスクリードを無視して恐怖で死ぬだけです。
その間:
sub foo {
my @args = @_ ;
my( $a, $b )=(@args[0],@args[1]);
for( @{ $a } ){
$b .= $_ ;
s/id//g;
}
return [$b,$a];
}
Perl に精通した人にとってはある程度の一貫した意味を成すかもしれませんが、平均的なコードの読者にとっては「一体何を言ったんだ」という反応しか得られません。それを文書化することもあまり役に立ちません。
| there is a subroute foo which can take a list of strings, and a default string,
\- which then iterates all items in that list,
| \- and for each item in that list
| 1. appends the contents of that item to the end of the default string
| 2. removes all instances of the string "id" in that item
|
\ and returns a list, which contains
1. the concatentated default string
2. the modified input list
突然、曖昧さがなくなり、より多くの人々がそれを理解できるようになります。
したがって、アルゴリズムを書く練習の半分は、「理解していることを証明するだけでなく、問題について何も知らない他の人に自分の推論を説明できることも証明する必要がある」という練習になる可能性があり、これは非常に重要です。必要な能力。自分がやったことを伝えられなければ、誰もそれを活用できません。
コードには、アルゴリズムには存在しない厄介な小さな問題もあります。 見て 正しいですが、あなたが望んでいることはできないかもしれません 考える それは実行されますが、それが正しく行われなかった場合、そしてあなたが気づかなかった場合、コードを読んでいる人々はコードをリバースエンジニアリングして、それを汚し、 壊れた アルゴリズム。良くない。人間の形をしたアルゴリズムは、「これが私がやりたいことです」をより適切に翻訳します
他のヒント
この場合、教授に従う必要があります。
詳細情報を提供する必要があります。アルゴリズムを求められましたが、コードを提供しました。コードにコメントしましたか?いくら? (質問とあなたの答えを見たいのですが、おそらくそれはあまりにも多くを要求しています)。
したがって、私は自分の経験に基づいて答えます。アルゴリズムを求めている場合、問題を解決する方法および/または質問の要件を満たす方法を、まともな英語で説明するものが必要です。ダイアグラムも優れています(場合によっては優れています)。段落、ポイント形式、何でも-それは明確、簡潔、そして正確である必要があります。
上記を行うコードを提供してくれたら、満点です。ただし、純粋な" language"のコードを提供する場合、むしろ不可解な場合、マークは失われます-コードが実際にどれだけ不可解であるかに応じて多かれ少なかれ。コードを使用しても、概念を完全に理解できるように、図も表示したいと思います。
プログラミングを教えるときに直面する最も難しいことの1つは、生徒にもっと多くのことを書かせることです。時々、課題(または試験)は「最も難読化されたコードコンテスト」のエントリではないことを思い出させる必要がありました。 ;-)
乾杯、
-R
高度なアルゴリズムコースの採点者として、単純にコード化されたソリューションがある場合は、常にポイントを取ります。
一部の事柄は、英語のように雄弁にコードで表現できない場合があります。擬似コードは、厳密なコンパイラ構文から自由になり、表現力をある程度高めるための試みです。理解の正しい方向への一歩ですが、必ずしも十分ではありません。
特にアルゴリズムクラスでは、正確性の証明(帰納法、矛盾などによるものであるかどうか)と、アルゴリズムの空間的および時間的複雑さを表すビッグO表記を提供することが常に重要です。 。
私が知っているのは、アルゴリズムを取得するまでコードを書かないことです。
擬似コードの代わりにコードを使用することの問題は、理論的には、擬似コードではなくコードであると想定できることです。とにかく、教師はあなたの知識を評価するのではなく、あなたの回答を評価します。はい、私たちは皆知っています、あなたはよく知っています。しかし、他人のやり方を推論しようとすることは決して悪い運動ではありません。そして少なくとも私の国では、教師はあなたを自由に評価する権利を持っているので...彼と仲良くしてください!
質問を間違えた理由を教授に話して聞いてください。正しい答えは何か、そして両者の根本的な違いは何かを彼に尋ねてください。
書いたアルゴリズムが間違っていたのでしょうか?
コードは、マシンが実行できるように記述されたアルゴリズムです。その定義には、人間が理解するためにも書かれていないということは何もありません。 Javaで書くとアルゴリズムがわかりにくくなりましたか?それはあなたの先生に同意したかどうかを決定します。