CS(コンピュータサイエンス)基礎を学びなおしたいと思い
CS50を見つけたのでやってみる
メモ
https://www.youtube.com/watch?v=pLuwGw_RXRs&t=2s https://cs50.jp/x/2021/week0/notes/
目次
week 0
コンピュータサイエンスの根本は問題解決
input(問題)から、output(解決)を生成するブラックボックス(プロセス)を学ぶ
input → ブラックボックス → output
2進数 bits
コンピュータはシンプル
0 1 しか使わない
語源は binary digits
コンピュータの入力は?
入力は電気
詳しく説明しないけど、電子がデバイスに流れ込んで充電されると考えとけばいい
コンピュータを生み出したアイデア
電気を使えば情報を表現できる
例えば - 電球の電源を入れると光る - 電球の電源を抜くと消える
これを 0 と 1 と呼べばいい
これこそがコンピュータを生み出したアイデアであり
コンピュータに2進数が使われる理由
2以上を表現したい
電球の数を増やせばいい
トランジスタ
コンピュータは電球ではなく
トランジスタというスイッチを何百万個も搭載してる
- on 1
- off 0
これで何を表現する?
コンピュータが出来た時は退屈な計算をさせてた
今はスマホ、PC、色々ある
コンピュータは数字だけでなく文字も表現できる
2進数で得た数字を特定の文字に割り当てる
みんなでルールを作った
コンピュータはあなたが使用しているプログラムの種類に注意する
例えば - 電卓の65は文字通り10進数の65 - テキストの65はA
表現は同じだけど文脈が違う
(同じデータでも文脈で意味が異なる)
ASCII
65をA、66をBに対応させるために
何年も前の人間が考えたのがASCII
American Standard Code for Information Interchange
例:
72 73 33 = H I !
ASCIIは8bit
8bit = 1byte = 00000000~11111111 = 0~255
256文字まで表現できる
ASCIIで不足しているものは?
日本語などは256文字では表現できない
言語のみでなく、人間がコミュニケーションで使う記号は256文字で足りない
Unicode
全ての人類の言語をサポートするように
人間が考え出したもの
RGB
色を表現するために人間が考え出したもの
例:数字は色の割合
72 73 33 = 赤(72) 緑(73) 青(33) = 中程度の赤 中程度の緑 少しの青 = 黄色
ドットの一つ一つが3byteなので
画像はキロバイト、メガバイトになる
動画
ドットの色を1秒間に何度も変化させれば
画面上に実際に動きがあるように錯覚させることができる
パラパラ漫画と同じ
音楽
音を表す数字があればいい
音の長さも数字にすればいい
量子化する(数字にしちゃう)
その他のファイル
JPEG,GIF,WORD,EXCELなど様々なファイルがあるけど
0,1パターンをファイルに保存する方法について
みんなが合意していることを表している
つまり情報の表現方法を世界中で合意が得られれば
問題に対するインプットを表現し
問題を解決してアウトプットを得ることができる
アルゴリズム
問題解決、コンピュータサイエンスとは
数字、文字、画像、ビデオ、音声などの入力を
どのようにして実際のもの(solution)に変換するか考えること
これをアルゴリズムと呼ぶ
アルゴリズムとは問題を解決するためのステップバイステップの指示
料理の本を読んでレシピ通りに料理すれば
それはアルゴリズムを実行していることになる
input → algorithms → output