ビット操作の基礎 February 05, 2018 overview bit操作に慣れ親しんでおく(特にXOR) -16 >> 2 == -4 maskについて理解する 最下位ビットを0にクリアする方法を知る 15 & ~1 brute-for
5Lと3Lのボトルで4Lの水を計る January 29, 2018 水の移し方 3Lの水をくんで、5Lのボトルに移す。 その後5Lのボトルをいっぱいにしても捨てなければいけないので、 常に3Lの水をくんで5Lの水に
貪欲法の基礎 January 29, 2018 overview 各ステップにおいて、局所的な最適な決定を繰り返すソリューション 必ずしも最適解を導くわけではない bootcamp 1,5,10,25,50,100セントを使
再帰の基礎 January 22, 2018 overview 部分的により小さいソリューションに分解できる問題 検索、列挙、分割統治、複雑な問題の分解は再帰を適用できる可能性がある 再帰関数はベースケース
動的計画法の基礎 January 22, 2018 overview DPはいつでも解法の1つになりえる 特にサブ問題に関連する問題に適用できる 分割統治との違いは、同じサブ問題が何度も起こり得ること。そのため、
SQLの基礎 January 15, 2018 SQLの実行順序 FROM WHERE GROUP BY HAVING SELECT ORDER_GY DBの作成 CREATE DATABASE shop; テーブルの作成 CREATE TABLE Shohin (shohin_id CHAR(4) NOT NULL, shohin_mei VARCHAR(100) NOT NULL; PRIMARY KEY (shohin_id) ); DEFAULT制約をつければデフォルト値を入れられ
ソートの基礎 January 15, 2018 overview ソートは検索を早くするプリプロセスとして使われる 似ているアイテムを探すのにも使われる ヒープソート in-placeだが安定でない spaceO(1) マージソー
ハッシュテーブルの概要 January 08, 2018 overview 挿入、削除、参照がO(1) 衝突に対する実装が必要 linked-listを使うなど 衝突が発生すると、O(1+n/m)に増えていく(m:配列の
連結リストの概要 December 31, 2017 概要 片方向リスト、双方向リスト、循環リストがある 挿入と削除がO(1) 検索がO(n) 配列と比較したトレードオフ 追加の場合、配列は限界がありフラ
連結リストの実装 December 24, 2017 class DoublyLinkedListNode(object): def __init__(self, value): self.value = value self.next = None self.prev = None class SinglyLinkedListNode(object): def __init__(self, value): self.value = value self.next = None
Stackの基礎 December 17, 2017 概要 pushとpopが基本動作。LIFO time O(1) 配列で実装可能 peek操作もある(要素の山椒の実で取り出さない) 8.1 MAX値を返せるStackの実
ヒープの基礎 December 10, 2017 概要 ヒープは特別な二分木 完全二分木である 親ノードの値は子よりも小さい(最小ヒープのとき) 配列で実装できる。親iの子は2i+1, 2i+2 挿入と削除が
二分探索の基礎と実装 December 03, 2017 概要 sorting O(nlogn) search O(logn) mid = (low + high)/2 はオーバーフローしてしまう mid = low + (high - low)/2ならよい 実装 def bsearch(t,A): low, high = 0, len(A)-1 while low <= high: mid = (low + high)//2 if A[mid] < t: low = mid + 1 else if A[mid]
配列の基礎 November 19, 2017 概要 データの取得と更新がO(1) 削除がO(n-i) 時々resizingが必要になる brute forceでO(n)spaceだが、ソリューションによっ