     }
   }
 
-  // The public initializer calls this function to ensure that its parameter
-  // meets the conditions set in its documentation.
+  /// The public initializer calls this function to ensure that its parameter
+  /// meets the conditions set in its documentation.
+  ///
+  /// - Parameter changes: a collection of `CollectionDifference.Change`
+  ///   instances intended to represent a valid state transition for
+  ///   `CollectionDifference`.
+  ///
+  /// - Returns: whether the parameter meets the following criteria:
+  ///
+  ///   1. All insertion offsets are unique
+  ///   2. All removal offsets are unique
+  ///   3. All associations between insertions and removals are symmetric
+  ///
+  /// Complexity: O(`changes.count`)
   private static func validateChanges<C>(_ changes : C) -> Bool where C:Collection, C.Element == Change {
     if changes.count == 0 { return true }
 

    self.init(validatedChanges: c)
  }

  // Internal initializer for use by algorithms that cannot produce invalid
  // collections of changes. These include the Myers' diff algorithm and
  // the move inferencer.
  init<C>(validatedChanges c: C) where C:Collection, C.Element == Change {
    let changes = c.sorted { (a, b) -> Bool in
      switch (a, b) {

  /// states, this initializer will fail unless its parameter meets to the
  /// following requirements:
  ///
  /// 1. All insertion offsets are unique
  /// 2. All removal offsets are unique
  /// 3. All associations between insertions and removals are symmetric
  ///
  /// - Parameter c: A collection of changes that represent a transition
  ///   between two states.
  ///
  /// - Complexity: O(*n* * log(*n*)), where *n* is the length of the
