Page 199 (PDF page 237):
I'm reading the chinese version of Programming in Scala 2 Edition so I'm
not sure about the real page number in english version.
In chapter 16.6, Reverse List, the following method
def rev[T](xs: List[T]): List[T] = xs mathch {
case List() => xs
case x :: xs1 => rev(xs1) ::: List(x)
}
The book says the complexity of this method is
n + (n-1) + ... + 1 = (1+n)*n/2
I think rev on list of length 1 needs only one 'append' step,
rev on list of length 2 needs 2 steps(one more than rev on list of length
1),
rev on list of length 3 needs 3 steps(one more than rev on list of length
2),
...
...
so rev on list of length n needs n steps(one more than rev on list of
length n-1) and there is no duplicate invocation on each length of
sub-list.
I have also modified the previous method to prove that the complexity is
n :
var countOfAppend = 0
def rev[T](xs: List[T]): List[T] = xs mathch {
case List() => xs
case x :: xs1 =>
countOfAppend += 1
rev(xs1) ::: List(x)
}
If I test the following code:
val list = 1 :: 2 :: 3 :: 4 :: 5:: Nil
rev(list)
then I will get countOfAppend of 5(not 15), am I wrong?
|
Page 300 (PDF page 330):
in the last paragraph: "a, b andc" -> "a, b and c"
FIXED
|
Page 322 (PDF page 352):
First line: "1, 2, 3@" -> "1, 2, 3"
FIXED
|
|
|
|