CLRS Chapter 4

Introduction to Algorithms / アルゴリズムイントロダクション

Exercise 4.1-1

最大要素一つのみの配列

Exercise 4.1-2

def BruteForceMaximumSubarray ( A )
   max <- -1
   r <- 0
   l <- 0
   loop for i from 0 below A.length
      sum <- 0
      loop for j from i below A.length
         sum <- sum + A[j]
         if max < sum
            max <- sum
            r <- i
            l <- j
   return A[r .. l]

Exercise 4.1-3

n0 = 23だった。crossover pointは変えないが、全体的にrecursiveバージョンは速くなる。
面白いのがrecursiveの計算時間をTr(n)とおくと、Tr(n0) > Tr(n0 + 1)となったところ。bruteの計算時間をTb(n)とおくと、Tr(n0) = Tb(n0) , Tr(n0+1) = 2Tb(n0/2) + Theta(n)となり、Tb(n0/2)がTb(n)に比べて十分小さかったからだ。そこで、bruteに切り替えるのをn0/2 (13) にしたところ、recursiveバージョンはさらに速くなり、crossover pointはn0/2+1 (14)となった。

Exercise 4.1-4

元のアルゴリズムの返り値が正だったらそのまま。負だったら空配列を返すようにする。

Exercise 4.1-5

Figure4.1のPrice配列のようなものを作り、Price[0 .. i]の最小値をiについてそれぞれ計算していく。それとPriceの差のmaxを取る。