реализация дерева двоичного поиска JavaScript [закрывается]

Дженерики Java работают путем проверки типов во время компиляции и вставки соответствующих бросков, но стирание типы в скомпилированных файлах. Это делает универсальные библиотеки применимыми кодом, который не понимает дженериков (который был преднамеренным проектным решением), но что означает, что Вы не можете обычно узнавать то, что тип во время выполнения.

общественность Stack(Class<T> clazz,int capacity) конструктор требует, чтобы Вы передали Объект класса во время выполнения, что означает, что информация о классе доступна во времени выполнения для кодирования, которому нужен он. И Class<T> форма означает, что компилятор проверит, что Объектом класса, который Вы передаете, является точно Объект класса для типа T. Не подкласс T, не суперкласс T, но точно T.

Это затем означает, что можно создать объект массива соответствующего типа в конструкторе, что означает, что типу объектов, которые Вы храните в своем наборе, проверят их типы в точке, они добавляются к набору.

13
задан brad 25 August 2009 в 22:04
поделиться

2 ответа

Если это важно, я обнаружил, что хранение такого рода данных в виде литерального дерева менее эффективно, чем хранение его в виде уже отсортированного массива и выполнение бинарного поиска в массиве для объединения / вставки элементов. Очевидно, создание объектов JavaScript не является бесплатным.

Есть еще трюк с кодированием дерева в массиве:

[5, 3, 7, 1, null, 6, 9, null, null, null, null, null, null] 

то же самое, что и

      5
     / \
    3   7
   /   / \
  1   6   9

, т.е. children (N [i]) = N [2i + 1], N [2i + 2]. Я не знаю, действительно ли это дает вам хоть какую-то победу в JavaScript.

Если вы попробуете какие-нибудь альтернативы двоичному дереву, не могли бы вы опубликовать здесь свои выводы? :)

13
ответ дан 1 December 2019 в 19:40
поделиться
Другие вопросы по тегам:

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