アメリカの大学で奮闘中

アメリカの大学でプログラミングを学ぶべくコンピューターサイエンス学部に留学したものの挫折し数学科に転部した著者が、自分の挫折ポイントを踏まえて数学、プログラミング、アルゴリズムついてできる限り分かりやすく解説してみるブログ。*できる限り記事の内容は技術的な間違いをしないように気をつけていますが、もし間違いがあれば教えていただけると助かります。

GitHubの使い方を超簡単に解説してみた〜チーム開発編〜

astrostory.hatenablog.com こちらの記事の続きになります。 ソフト面でできること GitHubの機能を使ってできること 開発前に常にコードは最新にしておく 自分の修正をmainに入れない イメージして欲しいのですが、 自分がレポジトリからプログラムを落とし…

GitHubを超簡単に説明してみた

ソフトウェア開発で欠かせないGitHubの使い方をざっくり超簡単に解説してみます。 今回カバーするのは、「GutHubでの新しいレポジトリ(PCのフォルダーのようなもの)の新規作成」、「GitHubのコードのダウンロードの仕方」、「GitHubに変更を追加する方っ方」…

MNISTのデーターセットを使ってニューラルネットワークを実装しよう

この記事は以下の記事の続きになり、実際にPythonのKerasというライブラリーを用いてニューラルネットワーク(深層学習より層が少ない)を実装していきたいと思います。 astrostory.hatenablog.com Kerasとは Kerasは、ディープラーニングモデルを作成するため…

スタック(Stack)とキュー(Queue)について

スタック(Stack)とキュー(Queue)は自分の知るがぎり簡単な部類のデータ構造ですが、どっちがどっちか間違いやすく意外と厄介です。この記事でっはその違いを簡単に紹介できればと思います。 スタック(Stack)とキュー(Queue)の違い 違いを一言で言うと、スタ…

機械学習、初学者必見!深層学習のアルゴリズムのイメージを書いてみた

機械学習、初学者の方へ 最初から複雑なモデルを作れるだけのプログラミングと数式の理解はハードルが高く難易度ががります。ですが簡単に何かおーっとなるようなAIモデルを作りたい。 そんな人にGoogleのTeachable Machineはおすすめです。 Teachable Machi…

プロのエンジニアは何が違う?保守性です。

アメリカの大学を卒業して1年弱経ち、新卒でIT企業に入社しエンジニアとしてシステムの開発に約10ヶ月ほど従事しました。 そこで気づいたプロのエンジニアの書くコードと自分の大学時代に書いていたコードの書き方で明確な違いが何点か見つかったのでここで…

JavaScriptの基本文法をpythonと比較してマスターしよう!③

関数 定義の仕方 pythonの場合 def add(a,b): return a+b JavaScriptの場合 const add = function(a,b){ return a+b; }; 呼び出し方は両方とも同じです。 add(1,2) add(1,2) アロー関数 *新しいJavaScriptではアロー関数といって以下の書き方もできます con…

JavaScriptの基本文法をpythonと比較してマスターしよう!②

繰り返し処理 while文 num = 10 while num >0: print(num) num -= 1 while (num >0){ console.log(); num -= 1; } for文 for i in range(num): print(i) for (let num = 10; num<10; num -=1){ console.log(num); } この場合、num -=1をnum --と書くことも可…

JavaScriptの基本文法をpythonと比較してマスターしよう!①

上がpythonの書き方で、下がJavaScriptの書き方です。 出力 print() console.log(); コメントアウト # // 計算 + - * / %で、pythonとJavaScriprで変更なし 変数 変数の定義の仕方 blog = "アメリカの大学で奮闘中" let blog = ""アメリカの大学で奮闘中"; …

写像(Mapping)とは何か、関数とは何か

アメリカの大学の2年生の秋学期、長かったCalculasのクラスが終わろうとしている時期に、数学の基礎となる証明法や集合理論、数学的記述方法のクラスが始まりました。 その時の自分は英語力を未熟で、数学は先生の板書かスライドの数式と教科書の公式を見比…

Web開発かアプリ開発かまだ決め切れていないエンジニアはJavaScriptを学びなさい

少し攻めたタイトルになってしまったのですが、今回の記事ではプログラミングを学び始めたor就活でエンジニア就職をする予定だけど何を勉強すればいいか分からない人で、特にWEB開発とアプリ開発で迷っている人をターゲットにしています。 結論から言うと、…

マルコフ連鎖②~グラフを考える~

前回の記事の続きです。 astrostory.hatenablog.com この記事ではマルコフ連鎖をグラフとして見ていきます。なお、今回も例は前回の記事の天気の例を利用します。 簡単に再度説明しますと 晴れ、曇り、雨という3つの状態があり、そのいずれかの状態から別の…

マルコフ連鎖①〜グラフ理論と確率〜

マルコフ連鎖というグラフ理論を用いた確率の考え方があり、これはプログラムの実装も可能で便利だと思うのでこの記事で詳しく説明できればと思います。 いつものように数学的な厳密性は少し欠けていても分かりやすい記事を目指します。 マルコフ連鎖とは マ…

クイックソート(Quicksort)を解説してみた by Python

クイックソートとはデータの集合をある決まりに従って並び替えるソートアルゴリズムの一種です。クイックソートはクイックと付いているだけあって早く処理できる方法になります。 今回は array = [5,4,6,9,2,7,8,1,3] → array = [1,2,3,4,5,6,7,8,9] arrayの…

マージソート(Mergesort)をPythonで解説してみた

マージソートとはソート(並び替え)アルゴリズムの一種で、与えられたリストに対して一定のルールのもとで並び替えるアルゴリズムです。 具体的な例で考えていきましょう 具体例 arrに数字の入ったリストを仮定してみます。 arr = [12, 11, 13, 5, 6, 7] こ…

(連結リスト)線形リストと循環リスト

*以前の連結リストの記事の続きです。 astrostory.hatenablog.com 今回は前回の連結リストの続きです。前回は片方向リストと双方向リストの解説を行いました。その時に使った例の連結リストは線形リストでした。 連結リストには線形リストと循環リストがあ…

片方向リストと双方向リストを大学生が解説してみた by python

以前の記事で連結リストの実装を簡単に紹介しました。 astrostory.hatenablog.com 実を言うと前回は連結リストの中でも一番シンプルで簡単な線形リストの片方向連結リストの解説を行いました。 ですが実際は連結リストはいくつかの種類があり、今回の記事で…

Gale-shapleyアルゴリズム

Gale-shapleyアルゴリズムはマッチングに関するアルゴリズムです。 合コンでの男女のマッチング、研修医と病院のマッチングなどのグループAとグループB、そして全ての参加者がそのマッチング対象のグループの参加者に対して順位がある場合、Gale-shapleyアル…

Spanning Tree(全域木)とは何か

今回の記事ではグラフ理論のSpanning Tree(全域木)を扱います。 まずそもそもグラフとは?の人はこちらの記事から入られることをお勧めします。 astrostory.hatenablog.com また今回は分かりやすくするために無向グラフを使います。 全域木 全域木はかなり平…

アメリカの大学でコンピューターサイエンスを学ぶ前に知りたかったこと

僕はアメリカの大学でコンピューターサイエンス学部に入り、その後他の学部に転部しました。 転部した理由はシンプルに挫折したことと、学べる内容が自分の思っていたものと違ったからです。 その経験を元に僕がアメリカの大学に入る前に知りたかったことを…

Geometry 相似の証明

中学の時に習ったであろう、2つの角が同じなら相似を証明していきます。 事前準備 そもそも相似とは そもそも相似(similarity)の定義は... 大学で使っているテキストブックによると... Two triangles are similar if their corresponding angles are equ…

大学の確率入門〜確率分布、確率変数、確率密度関数〜

大学で習う確率では関数で表して、微積も使います。 高校での確率の知識を持って大学の授業を受けた時にカルチャーショックのようなものを感じたので、そのような人が少なくなることと、確率をもっと詳しく学んでみたい人の入り口になることを願ってこの記事…

グラフ理論の超基礎とイメージが分かる記事

コンピューターサイエンスでも扱われるグラフ理論がどんなものなのかと、それの基礎的な知識を解説することが目的です。 少し特殊な数学なのでなれるまで少し時間がかかるかもです。 グラフと聞くとy=f(x)のグラフなどを思い浮かべるかもしれませんが、ここ…

<高校数学>高次方程式(3次以上)の解の探し方

今回は数2の内容です。 高次方程式を解く時に必要なマインドセットは”とりあえず解を一つ見つける"です。 解 α一つでも見つかると因数定理より x-α が因数であることが分かります。そこで元の関数 f(x) をその因数で割ることで、少し簡単な式を得れます。こ…

数学、哲学、プログラミングで異なる正しい

雑談回です。 僕の知っている中で最もロジックを使い、ロジカルシンキングを必要とする学問は数学、哲学、プログラミングだと思っています。 ですが、自分の知る限りこの3つはロジカルシンキングでも異なるマインドセットが学問の中にあるように感じます。 …

Hash Tableのアルゴリズム

Hash Tableはデータをハッシュ関数で変換したキーの示すテーブル(表)に埋め込むデーター構造です。 5個のハッシュテーブルの場合 ________ |________| ← キー0のデータ |________| ← キー1のデータ |________| ←…

プログラミング初心者にはPythonがおすすめな理由

僕の記事では一貫してpythonでアルゴリズムを紹介しています。それは僕が得意だからなのもありますが、何より読みやすさ書きやすさが理由です。 いろんなサイトでpythonは読みやすい言語だと紹介されていますが、なぜなのかをJavaと比べて紹介したいと思いま…

なぜ効率のいいアルゴリズムが大切なのか(Time Complexityの誘い)

まずは例題から alist = [1,11,5,9,13,4,3,7] このリストから13のインデックスを探すコードを考えてみてください。 今回は具体的なコードは書きませんが、おそらくforループで要素全体をインデックス0から調べる方法を考えたと思います。 この方法を使った…

<勉強法>プログラミングのエラーが起きたときのマインドセット  by python

以前プログラミングの上達法として自分の実際に行っている勉強法を紹介しました。 astrostory.hatenablog.com 今回はこの記事の続きです。 ですが、今回は勉強法ではなくマインドセットという少し怪しそうなものを紹介します。 自分はこのマインドセットを取…

選択ソート(Selectionsort)を丁寧に 解説してみた by Python

選択ソートとはデータの集合をある決まりに従って並び替えるソートアルゴリズムの一種です。 今回は array = [5,4,6,9,2,7,8,1,3] → array = [1,2,3,4,5,6,7,8,9] arrayの中身をリストを数字の小さい順に並び替える選択ソートを考えます。 ちなみにもしリス…