2009-07-06 14 views
5

C言語のアルゴリズムを学ぶには最適な場所やリンクは何ですか?問題を調べるだけで、アルゴリズムの実装をいつどこで使うべきか、どのように知っていますか?Cのアルゴリズム

+0

[Cの数値レシピ](http://www.nr.com/)! [1992版](http://www.nrbook.com/a/bookcpdf.html)(第2版)は、あなたが2007年の版を支払うことを望まないなら、素晴らしいです。 –

答えて

4

Algorithms in C Sedgewickは調査を開始するのに最適な場所です。利用可能なアルゴリズムとそれぞれのパフォーマンス特性に精通すれば、それぞれのアルゴリズムの使用場所を知ることができます。

+0

スティーブ、もっと良く理解できるオンライン文書 –

5

Cで一般的に使用されているアルゴリズムを実装するための妥当な(完全ではありませんが)書籍については、SedgewickのAlgorithms in Cを試してみてください。どんな技術的課題についても、紙の本はどんなWebリソースよりもはるかに優れている可能性が高いことに注意してください。

特定のアルゴリズムを使用する方法を知る方法については、私は経験に迫っているのではないかと恐れています。

+0

紙の本Neilとはどういう意味ですか? –

+0

私は私の答えで明らかにするでしょう。彼は、実際に本をオンラインで読むだけではなく、実際に本を読むことを意味します。 – GManNickG

+0

もちろん.GananとNeilには大変お世話になります。 インタビューのために徹底したいだけです。 –

12

アルゴリズムは、明確にするために必ずしも特定の言語に結びついているわけではないので、データ構造/アルゴリズムという概念を理解できる限り、どのアルゴリズムの書籍も効果的です。

つまり、これは良い選択のようです:Algorithms in C。私はC++ equivalentを私の棚に持っています。

Data Structures & Algorithm'sと呼ばれる言語には無関係であると思われる本がありますが、それはちょっと古いと聞きましたが、最近の構造を見逃してしまいます。

インターネットには多くの情報があることを忘れないでください。available to youしかし、通常、書籍はこれらの種類のものに適しています。これは、インターネットリソースが一度に1つのことに集中する傾向があるためです。たとえば、リストにO(1)[一定時間]の削除があるとすると、その意味を理解する前に、Big-O notationが何であるかを理解する必要があります。

本書ではこれらのことを正しい順序で説明しますが、インターネットリソースはBig-O表記法やデータ構造に焦点を当てますが、しばしば2つを簡単には接続できません。


これを使用する場合は、データを使って何をやっているのかということに関してはほとんどの場合接続します。

たとえば、順序要素が必要な場合はvector(配列)が必要ですが、順序要素と任意の場所からの削除(ただしランダムアクセスを犠牲にする可能性がある)が必要な場合はlistが適切ですそれは一定時間の除去です。

+0

GMan、ありがとうございました –

+0

sartaj sahni(共著者を忘れてしまった人)の "Algorithms"という本もあります。アルゴリズムの分析と設計に関する良い本です。インタビューのために過度の話があるかもしれませんが、広範囲にわたってトピックを扱います。 – xxxxxxxxxadfas

2

いつ、どこであなたが見て多くの問題を解決したらそれは、「パターンマッチング」と呼ばれていた問題

に探し によって にアルゴリズムの実装を使用する方法uは知っていますあなたは共通のものを認識し始め、以前の知識を再利用することができます。

ところで、Cでアルゴリズムを始める前に良い本の前にお勧めします。これは実装が難しく、より高いレベルの言語よりエラーが発生しやすくなります。一般的な手順は、Cで調整して最適化を開始することができます。

0

The Algorithm Design Manualは一見の価値があります。

+0

ああ、実際に見てみる価値はあるが、Cでアルゴリズムを探すのは良い場所ではないと思う。実際の状況では、アルゴリズムの大きな図とアプリケーションに役立つはずだ。 – nairdaen

2

多くの優れたリソースを持っていますすでに名前が付けられているので、私はここでそれらを繰り返さない。

どのようなアルゴリズムを使用するかは、どのように知っていますか?

  • あなたが座っ及び(難解なとそれら)基本的なデータ構造とアルゴリズムの長いリストを強で取得する十分な大きさのツールボックスを、持っている必要があります。あなたはすべての基本を取得しようとする必要がありますが、実際にはより特殊なサンプルのサンプルが必要です。

  • あなたはトレードオフは、あなた(時間、不安定種類など広告nauseum対安定インプレースコピーに対して、複数のパスに対して、単一のコードの複雑さ、メモリ、、)、そしてどのように利用できるかを理解する必要がありますあなたが勉強するアルゴリズムは、これらのそれぞれで行います。繰り返しますが、これは多くの勉強のケースです。ビッグオーは始める場所ですが、すべてが終わりではなく、すべてこれでありません。

  • 実際にの問題が発生した場合に直面する制限と、上記で説明したアルゴリズムのトレードオフに関して表現する方法を理解しておく必要があります。これにはある程度の直感が必要であり、一般的には時間の経過とともに練習によって学習されます。

  • あなたが進むにつれて、あなたの腸の中で学ぶために、何かがうまくいくか、そうではないか、いくつかのことを実現する価値があります。

  • 自分よりも経験豊かな人々が書いたコードを読む価値があり、彼らの考え方を知ることができます。

幸運。

1

私は近年ケネス・リークによるPointers on Cを読んでいます。私はC言語に精通していると思っていましたが、初心者にもかかわらず、この本は私にいくつかの功績をもたらしました。コード例は美しいものです(しかし、x86のようなCPU上では最速のコードではありません)。これは、使用されている最も一般的なアルゴリズムやデータ構造の多くを適切に実装し、なぜそれらが実装されているかについての優れた説明を提供します(代替実装のためのコードや提案もあります)。

あなたの質問と同じページ:Cで再利用可能なコードを作成するためのパターン(これは私たちが望むものではありませんか?)、C Interfaces and Implementations: Techniques for Creating Reusable Software、David R. Hanson私はそれを読んでから数年経っていますが、私は正しいことを確認するためのコピーを持っていませんが、正しく覚えていれば、良いC APIを作成する方法を扱っています。最も一般的なアルゴリズムの実装例を示しています。

話題の

C: A reference Manual:私は主に私的使用のためにCでスローアウェイプログラムを書いてきたようには、この1は私が優れたCの基準となるだけでなく、いくつかの悪いコーディング習慣を取り除く助けました。私はそれを買うべきだと私に思い出させる。

1

特定の問題にどのアルゴリズムセットを使用するかは、経験が必要です。目標を定義することが役に立ちます。速度、メモリ、堅牢性、ソリューションの品質などは、どのアルゴリズムを使用するかを決定するすべての要素です。さまざまな要素やシナリオを考えれば、同じ問題に対してさまざまな解決策を考案することができます。

0

アルゴリズムを学ぶ簡単な方法は、検索アルゴリズムや並べ替えのようないくつかの "古典的な"アルゴリズムに専念しているWikiページを使用することです。アルゴリズムの構造は、リンクリストやCのような異なるデータ構造を使用する能力に基づいています。まず、単純なリンクリストやバイナリツリーのような異なるデータ構造を実装しようとします。そして、実際に関連する異なるアルゴリズム人生の問題。

+1

サンプルにリンクする方法あなたが有用であると分かったWikiページ? – martijno

関連する問題