【ロードマップ】文系の元ラーメン屋が学んだコンピュータサイエンス
文系エンジニアの僕はとある現場でコンピュータサイエンス (CS) という言葉を知り、そこで自分がいかに理系エンジニアと比較して何も知らないのか打ちのめされました。そんな僕が遅れを取り戻すべく CS 学習の最中に書いた記事をまとめてみました。
27 記事
文系エンジニアの僕はとある現場でコンピュータサイエンス (CS) という言葉を知り、そこで自分がいかに理系エンジニアと比較して何も知らないのか打ちのめされました。そんな僕が遅れを取り戻すべく CS 学習の最中に書いた記事をまとめてみました。
とにかく代表的なデータ構造といえば「木とグラフ」ですね。その実装方法、探索アルゴリズムについて詳しく説明します。苦手意識がある人もいるかもしれませんが、ここまで記事を読んでくださった方ならきっと大丈夫です!
前回の記事で紹介した「連結リスト」を応用した「スタック・キュー」というデータ構造について解説します。たくさん問題も解くので、エンジニア面談の傾向と対策になると思います。
今回はノードオブジェクトの並びを表す「連結リスト」というデータ構造と「ランナーテクニック」について解説します。たくさん問題も解くので、エンジニア面談の傾向と対策になると思います。
今回は「配列・文字列」問題の解説をします。また、前提知識である「ハッシュテーブル・配列リスト・文字列連結」の説明をしています。問題を解くことで「ビットベクトル・行列」の知識も身につけることができると思います。
今回はひたすらオーダー記法で「実行時間」を求める練習をしてみようと思います。はじめは難しいですが、同じパターンが何度も現れるので理解さえしてしまえば簡単です。
今回は Big O 記法の「実行時間 O (log N) 」と「再帰の実行時間」について解説します! 初心者が慣れていないと勘違いしやすいところを重点的に説明しています。
今回は Big O 記法の「影響の少ない項も切り捨てる」という一般ルール、複数パートから成るアルゴリズムの計算時間で O (A + B) になるか O (A * B) になるかの判断、償却計算量について解説します。
今回はアルゴリズム性能を記述する Big O 記法について解説します。これを理解していなければアルゴリズム開発に苦労しますし、大きなテックカンパニーのエンジニアは知ってて当然レベルなので必ず押さえておきましょう。
プログラムの計算時間を評価するときなどに「対数」という言葉がでてきます。大きい累乗は指数的爆発が起きやすい…と以前説明しましたが、対数は大きい累乗計算を簡略化するときに使われたりします。今回はまず対数の基礎を説明します!
100 万個のデータから欲しいデータを先頭から探そうとすると、末尾に目的のデータがあったら 100 万回の処理が走ってしまいます。ここで探索アルゴリズムを使うと効率的なデータ取得が可能です。今回は「バイナリサーチ」という考え方を紹介します。
2 の累乗は「2^0 = 1 からはじまって、数を 2 倍にしていく」だけの単純な計算です。ですが、この 2^n はたびたび大きな問題になって解決できなくなってしまいます。今回は 2 の累乗数が引き起こす「指数的爆発」について説明します。
階乗 0! が 1 になる理由説明は困難ですが、階乗を再帰的に定義するときに「 0! は 1 じゃないといけない」と直感的にわかります。今回は「階乗の再帰的定義」と「再帰と帰納の違い」について解説します。
プログラムでは「再帰処理」といって、同じ処理を何度も呼び出すことがあります。これは答えを導くために必要な「依存している値」も一緒に求める処理です。今回は「再帰」の基本的な考え方を「ハノイの塔」という問題で解説していきます。
前回、置換・順列を解説しました。こちらは「順序を考える」並べ方でした。この置換・順列は「並べ方はどうでもよくて、パターンだけ知りたいよ〜」…なときは使えません。今回は「順序を考えない」並べ方である「組み合わせ」について解説します!
物を並べるとき「何パターンの並べ方が考えられるか?」を検討するのは重要です。また、全部を並べるのか・一部だけ選んで並べるのか...で話は違います。今回はアルゴリズムで頻出する「順列」を解説します!
物を普通に数えると、人間はしばしば数え間違いを起こします。しかし、数えたい物の性質・構造を理解して「数えるルール」を作れば間違いを防げます。今回は「植木算」と「和の法則・積の法則」を学び、初歩的な「物の数え方」について学習しましょう。
ループ処理を作るとき、インクリメントされていく 0 以上の整数を使った処理が常に「真」になるか? それを数式で証明することはできますか? 今回、0 以上のすべての整数についての主張を作ることができる証明方法「数学的帰納法」について解説します。
ケーニヒスベルグの橋という有名な一筆書きの問題があります。本当に一筆書きが可能か?「グラフ理論」というパリティのチェックで証明することが可能です。今回はそのグラフ理論について解説します。
剰余で偶数・奇数を求めることができますが、偶奇によってデータが壊れていないか? 実行可能か?「目印」としてチェックすることができます。これをパリティといいます。今回は偶奇 (パリティ) の意味・その判定方法について解説します。
「競技プログラミング」に挑戦することは大事です。効率的で高速なアルゴリズムを考えられるようになる、企業のコーディング試験対策になるからです。エンジニア能力を測る指標といえるでしょう。今回、勉強にオススメのサイトを 2 つ紹介します。
今回は剰余を使ったグループ分けについて解説します。なんらかの数字の法則性を発見できると、剰余でなんでもグループ分けが可能です! 一度グループ分けが完了すると、複雑な数式でもパターンで答えが分かるようになります。
今回はより実際のプログラミングに近い真偽 (boolean) の考え方である undefined を含んだ「3値論理」について解説します! 具体的にいうと AND や OR 条件の処理順・違った条件に書き換える方法を説明しています。
前回、命題について解説しました。今回は「否定」「二重否定」「論理積」「論理和」「排他的論理和」「等値」「恒真命題」「含意」「逆」「対偶」といった演算を使うと、命題の真偽がどう変化するのか?...を説明します。
これから何度かに分けて「論理」の解説を行っていきます。初回である今回は「命題」という用語について説明をします。「正しいか、正しくないか判断できる文」のことを命題と呼びますが、これは if 文の条件部分になるので、しっかりと理解しましょう。
前回、十進法・二進法の基本的な解説をしました。その中で 10 の 0 乗 は 1 だとサラっと言いましたが、理屈っぽく説明していませんでした。あなたはその理由を説明できますか? 今回は指数の基本的な考え方と「指数法則」について解説します!
今回はコンピュータサイエンス (CS) の基礎中の基礎である「10 進法」と「2 進法」について解説します! これがどういった概念なのか、また十進数から二進数に変換する方法など、初心者向けに詳しく解説しています!