英語の勉強にMITの講義でも Lec 5 | MIT 6.046J / 18.410J Introduction to Algorithms
タイトル微妙に変えました。少しづつ進めて行きます。
今回もsortingっぽいが、sortingがアルゴリズムの基本であることは、前回までの講義で明らか。
How first can we sort?
- 僕としては、n log nかなと。曖昧だな。
- Often correct.らしい。
- It depends.
- よく使う英会話表現だなw
- 日本語だと「あ〜」って感じになっちゃうけど、英語だと上手く伝えられる表現だと思う。
- 解説は、404 Blog Not Found:学校では教えてくれないグッドラッパー英語#0 - it depends.
- It depends.
- dependの本来の意味は依存する。
- It depends on 〜もよく使う。
- という事で、今回の講義は、
Depends on Model
- of what you can do with the elements.
- Can we do better than Θ(n log n)?
- Yes or No?
- おぉ。主題に迫ってきた感。
Comparison sort
- お、初めて聞くアルゴリズム。と思ったら、「モデル」についての話だった。
- と、気付くまでに相当の時間を要した。
- Comparison sort - Wikipedia
- 日本語だと、比較ソートの理論限界
- 補助資料 スターリングの公式
- 比較ソートは全て決定木で表すことが出来る。
- 再帰も、forで表せば決定木だな。
- リストの順列はn!あるので、決定木の葉の数はそれ以上になる。決定木の高さh=計算量である。決定木が持てる最大の葉の数は2^h。つまり、n! <= 2^h , h >= lg n!、スターリングの公式より(It's a magic!)・・・= Ω(n log n)になる?スターリングの公式がわからん。
- 決定木の全体像はとんでもなくでかい。
- だいぶ迷走したが、ようやく感覚的に理解できた。数学的には詰める所がいっぱいあるな。
- 途中でアルゴリズムを切り替える手もアリ。
- 僕の日記のヒープソートの項も参照。
Sorting in linear time
- 来ました。
- How first can we sort? → n log n. → Often correct. "It depends."
Counting sort
- 度数分布を使う方法。
- Counting sort - Wikipedia
- バケットソート - Wikipedia
- 分布数えソートが下の方に書いてある。bucketの場合はデータごと突っ込む。
- 頭いいな。
- とりあえず考察。
- 予めデータの範囲がわかっている必要がある。
- 初期化(キーの範囲 k)とカウント n、再配置(k + n)で済むな。= 2(k + n) = Θ(k + n)→早い?→kがでかいと初期化、位置計算で泣ける。→kに依存する。
- ヒープを使えば、データの範囲を除外出来る→早くね?→ヒープ作成に最大n log nのコストがかかるな・・・→重複が多い事が条件か・・・
- 結論:データの値に強く依存する。→"It depends."
- ま、聞くべ。
- おぉっと、僕の考えていた方法と講義と再配置の方法がちょっと違った。
- 予め戻る位置を計算しておけば、元のデータをもう一度走査しながら、付随する情報もソートできるのか。→Counting sortは安定ソート。
- 考察を修正:初期化 k →カウント n →オフセットの計算 k → 配置 n なるほど!!
- アルゴリズムの選択は重要だな。
- 考察したことを解説。
Stable sort
- 同じ値だった場合、元の順序を保つなら、stable
Radix Sort
- とりあえず考察編。
- 基数ソート - Wikipedia
- Counting sortの欠点を補い、データの範囲が広くてもまぁまぁ対応できそう。
- 基数ソートの各要素に、Counting sortを使ってみると、
- 8ビットなら、2(n + 2) x 8 = 16n + 32
- データ数が少ないとパフォーマンスが出ない。データ数nが2^16 + 32 = 65536 + 32以上なら比較ソートより早い?
- あぁ、8ビットだと0〜255個の範囲なので、10進数だと、2(n + 10) x 3 = 6n + 60か。
- データの範囲と、nによって最適な基数は変化しそうだ。最適な基数は・・・。
- 条件次第だが、n log nを凌ぐパフォーマンスが出せそうだ。→"It depends."
- 聞く。
- パンチカードに関する貴重な話。
- この辺→タビュレーティングマシン。メモメモ。
- Amazon.co.jp: JIS FORTRAN入門 (上): 森口 繁一: 本この本思い出したわ。
- 大学の授業全く出席してなかったな。覚えたコマンドは、$ netscape www.yahoo.co.jpだけだったが、今は高階している。
- 並べ替えてみると、安定ソートを上手く使ってるなぁ。
- 最適な基数は・・・。の答えが出てたありがたいw
- という事で、O(bn / log n)っと。
- パンチカードに関する貴重な話。
- 続きはnext fallか。聞けるかな・・・。
まとめ
- ソートの理論限界はΘ(n log n)は間違いで、「比較ソートの理論限界はΘ(n log n)」である。
- 条件によっては、もっと早いアルゴリズムを選択することも出来る。
ふと思ったこと
単語
- comparison n
- the process of comparing two or more people or things 比較、対照
- restriction n
- a rule or law that limits what you can do or what can happen 制限、制約 limitとは若干違う。
- internal adj
- connected with the inside of something 内部の
- implement v
- to make something that has been officially decided start to happen or be used 履行する、要件を満たすように実行する
- permeation n
- to spread to every part of an object or a place 浸透、普及
- radix n
- 1. the base of a number system or of logarithms 基数
お詫び
Fedoraインストール〜2012/10/23までの記事でリンク先に誤りがありました。