アルゴリズムイントロダクション Chapter 8

線形時間ソーティング。比較ソートがnlognかかることの証明と、その結果を利用した別のアルゴリズムの計算量の下界の証明。obliviousなsort。

Exercise 8.1-1

n-1

Exercise 8.2-4

def exercise_8_2_4(a,k)
  n = a.length
  c = Array.new(k+1)
  for i in 0..k
    c[i] = 0;
  end
  for i in 0...n
    c[a[i]] += 1
  end
  for i in 1..k
    c[i] += c[i-1]
  end
  return lambda{|a,b|
    if a == 0
      c[b]
    else
      c[b] - c[a-1]
    end
  }
end

Exercise 8.3-2

insertion, merge
インデックスをそれぞれにメモして置いて、比較する際にインデックスの大小も見る。

Exercise 8.3-4

n進法でradixsortする

Exercise 8.4-2

insertion sort以外を使う

Exercise 8.4-3

{\mathrm E}[X^2] = \frac{n+n^2}{4}
{\mathrm E}^2[X] = \frac{n^2}{4}

Exercise 8.4-4 8.4-5

Pから乱数を引いてきてそれを分割に使う。よく出てくるところは分割が細かく、よく出てこないところは粗くなる。

Problem 8-2 e

stableにはできないようだ
http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Sort/Radix/

Problem 8-4

b

状態木を考えると葉の数がn!個だからソートの時と同様にして示せる。

c

赤からpivotを一つ決めて、青をPartitionする。一つ同じ容量のものが見つかるのでそれをpivotとして赤をPartitionする。
pivot以下、以上についてこれを繰り返す。
赤と青がソートされるので、同じインデックスのものがペア