Союз рекурсивных множеств: как это работает на самом деле?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

26
задан posdef 25 April 2013 в 14:21
поделиться

2 ответа

  2
 / \  union  4
1   3

((1 union 3) union 4) incl 2
  ^^^^^^^^^......................................assume it works

(((E union E) union 3 incl 1) union 4) incl 2
   ^^^^^^^^^.....................................still E

(E union E) union 3 incl 1 = E union 3 incl 1 = 3 incl 1

Следующее поддерево должно быть 3 , включая 1

(  3             ) 
(    \   union D ) incl 2
(      1         )


(((1 union E) union 4) incl 3) incl 2
   ^^^^^^^^^.......................................expand

(((( (E union E) union E) incl 1) union 4) incl 3) incl 2
      ^^^^^^^^^^^^^^^^^^^^^^^^^^..................still 1

((1 union 4) incl 3) incl 2
   ^^^^^^^^......................................continue

((((E union E) union 4) incl 1) incl 3) incl 2
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^..........expand 1 union 4

((4 incl 1) incl 3) incl 2
  ^^^^^^^^^^^^^^^^^^^^^^^^^............Final union result 

Благодаря @Rex Керр вытягивает шаги. Я заменяю второй шаг фактическим этапом выполнения, который может дать более четкое описание функции Scala union.

2
ответ дан chapter09 25 April 2013 в 14:21
поделиться
  • 1
    Также превосходный пример, если это doesn' t, кажется, работают на Вас, это, кажется, ожидает, пока вся Ваша другая проверка ([Необходимый] и т.д....) не верна прежде " firing". – Chad Hedgcock 15 January 2014 в 15:27
  • 2
    Также превосходный пример, если это doesn' t, кажется, работают на Вас, это, кажется, ожидает, пока вся Ваша другая проверка ([Необходимый] и т.д....) не верна прежде " firing". – Chad Hedgcock 15 January 2014 в 15:27
  • 3
    Также превосходный пример, если это doesn' t, кажется, работают на Вас, это, кажется, ожидает, пока вся Ваша другая проверка ([Необходимый] и т.д....) не верна прежде " firing". – Chad Hedgcock 15 January 2014 в 15:27
  • 4
    Также превосходный пример, если это doesn' t, кажется, работают на Вас, это, кажется, ожидает, пока вся Ваша другая проверка ([Необходимый] и т.д....) не верна прежде " firing". – Chad Hedgcock 15 January 2014 в 15:27
  • 5
    Также превосходный пример, если это doesn' t, кажется, работают на Вас, это, кажется, ожидает, пока вся Ваша другая проверка ([Необходимый] и т.д....) не верна прежде " firing". – Chad Hedgcock 15 January 2014 в 15:27

Я веду тот же курс, и приведенная выше реализация union оказалась крайне неэффективной.

Я придумал следующее не функциональное решение для создания объединения множеств двоичного дерева, которое НАИБОЛЕЕ эффективнее:

def union(that: BTSet): BTSet = {
  var result:BTSet = this
  that.foreach(element => result = result.incl(element))
  result
}
-3
ответ дан Ilya Kogan 25 April 2013 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: