Lesen Sie den folgenden Absatz in der Programmierung in Scala, 2nd Edition, die für mich keinen Sinn ergab.Verstehen Sie nicht Effizienz ist anders in FoldLeft und FoldRight in Scala
def flattenLeft[T](xss: List[List[T]]) =
(List[T]() /: xss) (_ ::: _)
def flattenRight[T](xss: List[List[T]]) =
(xss :\ List[T]()) (_ ::: _)
Weil Liste Verkettung,
xs ::: ys
, Zeit proportional zu seinem ersten Argumente xs nimmt, ist die Umsetzung in der Falte rechts in flattenRight effizienter als die Falte links Umsetzung in flattenLeft. Das Problem ist, dass flattenLeft (xss) kopiert die erste Elementliste xss.head n - 1 mal, wobei n die Länge der Liste ist xss
Wenn also Liste Verkettungszeit proportional zu seiner ersten nimmt Argument, wäre das nicht flattenLeft
ist der effizientere, da das erste Argument eine leere Liste ist und flattenRight
das erste Argument ist eine Liste unbekannter Länge?