ビット操作の基礎 はてなブックマーク - ビット操作の基礎

overview bit操作に慣れ親しんでおく(特にXOR) -16 >> 2 == -4 maskについて理解する 最下位ビットを0にクリアする方法を知る 15 & ~1 brute-for

5Lと3Lのボトルで4Lの水を計る はてなブックマーク - 5Lと3Lのボトルで4Lの水を計る

水の移し方 3Lの水をくんで、5Lのボトルに移す。 その後5Lのボトルをいっぱいにしても捨てなければいけないので、 常に3Lの水をくんで5Lの水に

貪欲法の基礎 はてなブックマーク - 貪欲法の基礎

overview 各ステップにおいて、局所的な最適な決定を繰り返すソリューション 必ずしも最適解を導くわけではない bootcamp 1,5,10,25,50,100セントを使

再帰の基礎 はてなブックマーク - 再帰の基礎

overview 部分的により小さいソリューションに分解できる問題 検索、列挙、分割統治、複雑な問題の分解は再帰を適用できる可能性がある 再帰関数はベースケース

動的計画法の基礎 はてなブックマーク - 動的計画法の基礎

overview DPはいつでも解法の1つになりえる 特にサブ問題に関連する問題に適用できる 分割統治との違いは、同じサブ問題が何度も起こり得ること。そのため、

SQLの基礎 はてなブックマーク - SQLの基礎

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制約をつければデフォルト値を入れられ

ソートの基礎 はてなブックマーク - ソートの基礎

overview ソートは検索を早くするプリプロセスとして使われる 似ているアイテムを探すのにも使われる ヒープソート in-placeだが安定でない spaceO(1) マージソー

ハッシュテーブルの概要 はてなブックマーク - ハッシュテーブルの概要

overview 挿入、削除、参照がO(1) 衝突に対する実装が必要 linked-listを使うなど 衝突が発生すると、O(1+n/m)に増えていく(m:配列の

連結リストの概要 はてなブックマーク - 連結リストの概要

概要 片方向リスト、双方向リスト、循環リストがある 挿入と削除がO(1) 検索がO(n) 配列と比較したトレードオフ 追加の場合、配列は限界がありフラ

連結リストの実装 はてなブックマーク - 連結リストの実装

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の基礎 はてなブックマーク - Stackの基礎

概要 pushとpopが基本動作。LIFO time O(1) 配列で実装可能 peek操作もある(要素の山椒の実で取り出さない) 8.1 MAX値を返せるStackの実

二分探索木の基礎 はてなブックマーク - 二分探索木の基礎

概要 keyを効率良く探すことができ、かつmin/maxも同様に効率的に探せる keyの範囲も探すことができる ソートされた配列と似ているが、ke

ヒープの基礎 はてなブックマーク - ヒープの基礎

概要 ヒープは特別な二分木 完全二分木である 親ノードの値は子よりも小さい(最小ヒープのとき) 配列で実装できる。親iの子は2i+1, 2i+2 挿入と削除が

二分木の基礎 はてなブックマーク - 二分木の基礎

概要 空であるか、左の二分木の子と右の二分木の子をもつroot nodeがある木 二分探索木としてのコンテキストでよく現れる すべての木をたどるには

二分探索の基礎と実装 はてなブックマーク - 二分探索の基礎と実装

概要 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]

文字列の基礎 はてなブックマーク - 文字列の基礎

概要 比較、コピー、連結、分割、マッチなど基本操作について理解する brute-forceではO(n)spaceだが、ソリューションによってはO

配列の基礎 はてなブックマーク - 配列の基礎

概要 データの取得と更新がO(1) 削除がO(n-i) 時々resizingが必要になる brute forceでO(n)spaceだが、ソリューションによっ