2

中間期にアルゴリズムの代わりにコードを書き、AからCにぶつけたため、テストで答えの50%を失いました。コードを書き出すことは、依然としてアルゴリズム表現と見なされますか?

ウィキペディア:アルゴリズム表現(プログラミングスタイルはほとんどコンセンサスベースであるため)

編集:わかりました、それではいくつかのポイントを明確にしましょう:

  1. テストでは疑似コードが要求されましたが、これはクラスで実際に「定義」されることはありませんでした。アルゴリズムのために英語を書きました。

  2. これはJavaクラスであり、コメントとともにソリューション全体をJavaメソッドで書き出します。これらはすべて手書きであり、擬似コードよりも書き出すのに時間がかかりました。もっとはっきりすると思いました。

  3. 普段はそんなことは問題になりませんが、AとCの違いで、試験に奨学金をもらっています。

  4. 最後に、私は2つの理由でこの投稿を作成しています。

    4.1現代のプログラミングコミュニティが擬似コードとアルゴリズム表現についてどう考えているかを示したいと思います。

    4.2「現実の世界」で何が受け入れられるか知りたい。私はしばらくプログラミングをしてきましたが、すぐにオープンソースプロジェクトに貢献できるようになりたいと思っています。また、誰かの足を踏み入れたくありません。(このトピックが現実の世界で取り上げられる可能性はほとんどないと確信していますが)。

繰り返しになりますが、ヘルプ/アドバイスに感謝します。

4

8 に答える 8

5

例を挙げてください。コードがアルゴリズムの一部ではない言語の詳細に焦点を合わせすぎている場合は、当然のことながら、アルゴリズムにアルゴリズムが混在していないため、結果が正しくない可能性があります。

私はその理由を感じます。学習の全体的なポイントは、概念を理解していることを示すことであり、曲がってすべての正しいボックスにチェックマークを付けることではありません。

コンピューターは大学を卒業するように教えることはできますが、実際に自分で考えて知識を応用するようにコンピューターを教えることはまだできません。

食べて逆流する精神が私が卒業しなかった理由です。


最近のコメントに関して、擬似コードを実現することの重要性は未定義です。その中には一般的に再利用される用語がありますが、それは英語以上の厳密な言語ではありません(そうでなければ、それはプログラミング言語であり、逐語的に解析および実行される可能性があります)

擬似コードの重要性は、システムの論理部分を具体化することであり、「それは理にかなっている」以外の構文について過度に心配する必要はありません。

多くの場合、これにより、擬似コードがより簡潔 理解しやすくなります。

擬似コードはまた、それを処理するために言語の「魔法の構文」を理解している読者に依存していません。彼らが理解する必要があるのは、使用される用語だけです。

たとえば、平均的な人に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 

突然それは曖昧さが少なくなり、より多くの人々がそれを理解できるようになります。

したがって、アルゴリズムを作成する演習の半分は、「問題を理解していることを証明するだけでなく、問題について何も知らない他の人に自分の推論を説明できることを証明する必要がある」という演習です。これは非常に重要です。あなたが必要とする能力。あなたがしたことを伝えることができない場合、誰もそれを使用することはできません。

コードにはこの厄介な小さな問題もあります。これはアルゴリズムには存在しません。つまり、コードは正しく見えるかもしれませんが、思ったとおりに動作しない可能性があります。正しく動作しない場合は、気づかないでください、コードをリバースエンジニアリングして読んでいる人はそれを汚して壊れたアルゴリズムをコピーします。良くない。人間の形のアルゴリズムはよりよく翻訳します'これは私がしたいことです'

于 2008-11-04T23:20:24.373 に答える
3

この場合、あなたは教授に従う必要があります。

于 2008-11-04T23:23:03.667 に答える
2

高度なアルゴリズムコースの採点者として、単純にコード化されたソリューションがあれば、私は常にポイントを取ります。

英語のように雄弁にコードで表現できないものもあります。擬似コードは、厳密なコンパイラ構文から解放され、ある程度の表現力を可能にする試みです。これは理解しやすさの正しい方向への一歩ですが、必ずしも十分ではありません。

特にアルゴリズムクラスでは、アルゴリズムの空間と時間の複雑さを表すbig-O表記だけでなく、正当性の証明(誘導、矛盾などによるものかどうか)を提供することが常に重要です。

于 2008-11-13T20:04:33.857 に答える
2

より多くの情報を提供する必要があります。アルゴリズムを求められましたが、コードを提供しました。コードにコメントしましたか?いくら?(質問とあなたの答えを見たいのですが、おそらくそれは要求が多すぎます)。

ですので、私自身の経験に基づいてお答えします。アルゴリズムを求めている場合は、問題を解決する方法や質問の要件を満たす方法をまともな英語で説明するものが必要です。ダイアグラムも優れています (場合によっては優れています)。パラグラフ、ポイント フォーム、何でも - 明確、簡潔、正確である必要があります。

上記を実行するコードを提供していただければ、満点です。ただし、純粋な「言語」でやや不可解なコードを提供すると、コードが実際にどれほど不可解であるかに応じて、マークが失われます。コードについても、概念を完全に理解していることを示すために、図も見たいと思います。

プログラミングを教えているときに直面する最も難しいことの 1 つは、学生に書くことを減らすのではなく、増やすことです。課題 (または試験) は「最も難読化されたコード コンテスト」へのエントリではないことを彼らに思い出させなければならないこともありました。;-)

乾杯、

-R

于 2008-11-04T23:49:08.530 に答える
0

私が知っているのは、アルゴリズムが完成するまでコードを記述してはいけないということだけです。

于 2008-11-04T23:15:28.830 に答える
0

教授と話して、なぜ問題を間違えたのかを尋ねてください。正しい答えは何か、そして両者の根本的な違いは何かを彼に尋ねてください。

あなたが書いたアルゴリズムが正しくなかったのでしょうか?

于 2008-11-05T00:56:05.273 に答える
0

コードは、機械が実行できるように書かれたアルゴリズムです。その定義には、人間が理解できるように書かれていないと言っているものは何もありません。Java で書くことでアルゴリズムがわかりにくくなりましたか? それによって、私があなたの先生に同意したかどうかが決まります。

于 2008-11-05T01:22:00.323 に答える
0

疑似コードの代わりにコードを使用する場合の問題は、理論的に言えば、それが疑似コードではなくコードであると想定できることです。いずれにせよ、教師はあなたの知識ではなく、あなたの回答を評価します。質問されたことには、教師が好む言葉で答えたほうがよいでしょう。はい、私たちは皆知っています。しかし、他人のやり方を推論しようとすることは、決して悪いことではありません。そして、少なくとも私の国では、先生はあなたを自由に評価する権利を持っているので、...彼と仲良くしてください!

于 2008-11-04T23:29:49.020 に答える