Cindy's Blog

アマゾンで働いているエンジニアの日常

アルゴリズムの練習について(Python)Lv.0

こんにちは〜キンキンです! 5月から、わけがあって私はPythonを学んでアルゴリズムの勉強を始めた。 ので!三ヶ月ほどの心得やオススメの本、サイトなども載せます。 初心者は頭から読んで、経験者は飛ばして好きなところを読むといいでしょう。

アルゴリズムってなに?

と聞くよね。そうです、Computer Science の出身じゃないと分からないでしょう笑

普通はそう言います。プログラム=データ構造+アルゴリズム これは嘘ではない、本当です。

データ構造はなに!? データ構造は、簡単なもんだったらint(整数),float(小数点)などで、 難しい方が2分木などがあります。もちろん、高級なデータ構造はTrie木(辞書木もよばれる)などがあります。

しかし、頭の隅にいれてください。 アルゴリズムは普段仕事とか研究用途への実用性が低い。アメリカや中国の企業ではあくまでも就職のとき(面接)質問が出されます。」 しかし、なんで勉強するの?日本企業では聞かれないでしょう?

いや。プログラムのアルゴリズム次第で、プログラムの安定性、スピードが決まります。 おなじく、アルゴリズムを知らないと、余計なスペースを使ったりとか、プログラムを書くときに考えが常に変なところに飛んでしまうのがよくあります。

個人的な感想は、pythonで書いたのですが、C#に戻ると力がついたと実感したので、 練習はおすすめです。

なんでPython?

Pythonは動的な言語です。動的な言語ということは、

Test  = 11
Test = '12'

このときのTestは自動的に数字11に応じて、Test はInt型になる。 そして二行目のTestは文字列の12に応じて、Test 自動的にString型になる。 かなり自由です。

一方、他の言語はほとんど以下のケースに当てはまる。

int Test  = 11;
string Test = "12"; ←エラー

まず、Testの前にInt型を決めてから(箱を作ってから)ものをいれます。 二行目のTestは一行目のTestと重なるので、エラーがでます。

もちろん、Python のいいところこれだけではない。 例えば、 文字列の最後の一個を消したい場合(例:"01234567 -> "0123456")

C#系はこれで実行します。

string Test = "01234567";

Test =  Test.Substring(0,  Test.Length - 1);   

一方、Python

Test = "01234567"

Test = Test[0:-1]

最後にアルゴリズムによく使われるFor文を使います。今回は数字 13579 を print することにしよう。

C#系はこれで実行します。

for (int i = 3; i <= 9; i += 2)
{
    print(i);
            
}

一方、Python

for i in range(1,10,2):
    print i

ただ二行で完成します。

Pythonrange 関数は、引数3つを使います:

range(始点,終点+1,ステップ)

気をつけないといけないのは、真ん中の終点とステップです。

range(1,10,2):のように、数列は9までなのに10を指定します。 またステップということは、次の値は今の値の関係を示します。

1 +2 = 3 3 +2 = 5 などですね。

また気づいたかもしれませんが、Pythonでのメソットは「{}」ではなく、インテンドで使います。

他に色々、たとえあListは空なのかどうかを確認するときは、「is not None」を使います。「is not None」は、「!= None」と同じ意味です。

list_ = []
if list is not None

他にも、Qiitaに載っているよい文章もあるし、

qiita.com

コードを書きながら勉強したい場合は、「SoloLearn」というアプリをおすすめします。

www.sololearn.com

なぜ、ここまでPythonのいいところここまで説明したのかは、 Pythonは明らかに読みやすいです。 読みやすいコードは、アルゴリズムを勉強するときに非常に簡単に本質をすぐ掴めます。 ロジックがわかりやすいく、他の人が書いたコードを読み、効率はとてもいいと言えるでしょう。

アルゴリズムの練習サイトってある?

たくさんあります

1・ 英語版ーLintCode www.lintcode.com

初心者はレベルEasyでも難しいと思うので、「Naive」から練習するのはおすすめです。

2・ 日本でとても有名ーAtcoder

beta.atcoder.jp

ちなみに、使い方は↓からはじめましょう qiita.com

Atcoderは、データの分解から始めるので、実戦に近いです。

3・  GeekforGeeks

このサイトに、テュートリアルもあるので、おすすめです。 Atcoderと同じく、データの分解から始めるので、実戦に近いです。

www.geeksforgeeks.org

Pythonの練習サイトってある?

1・ コードを書きながら勉強したい場合は、「SoloLearn」というアプリをおすすめします。

www.sololearn.com

2・ 日本語の書籍もあります

Pythonで体験してわかるアルゴリズムとデータ構造

Pythonで体験してわかるアルゴリズムとデータ構造

しかし、この本の後半に書かれているデータ構造は変わった形で練習しているので、

ちゃんと後に自分で初期化(def init (self,))でかけるようにしておきましょう。

3・ Python Tutorial (英語)

www.tutorialspoint.com

以上です! では練習を楽しんでいきましょう〜