Хобрук: Ваш путь к мастерству в программировании

Модифицированное двоичное дерево поиска для сортировки?

Мне нужно отсортировать массив. Помимо уже существующих типов сортировки, мне было интересно, сработает ли подобный алгоритм и какова его сложность.

У меня есть массив, который нужно отсортировать. Я создаю двоичное дерево поиска.

Поэтому, если я вставлю все элементы массива в BST, а затем назначу их обратно в массив один за другим при обходе дерева по порядку, я получу отсортированный результат. (Хотя занимают больше места из-за узлов дерева. Не сортировка на месте.)

int i=0;

void sort_by_inorder(node *n)
{
    if(n==NULL)
    {
        return;
    }
    sort_by_inorder(n->leftchild);
    array[i++]=n->data;
    sort_by_inorder(n->rightchild);
}

Я знаю, что BST не позволяет дублировать вставки, поэтому, возможно, мы могли бы рассмотреть возможность изменения алгоритма вставки BST в ‹= для левого поддерева или, возможно, в> = для правого поддерева.

Будет ли это хорошая реализация (работоспособная)? В чем будет сложность?

Сложность обхода в среднем O(n). А прошивка просто O(log n). Так что, на мой взгляд, это должен быть эффективный алгоритм.

Спасибо.


  • Каждая вставка - это O (log n), поэтому вы фактически получаете O (n * log n) 13.07.2012
  • Вы должны выполнять обход по порядку, а не по предварительному заказу. 13.07.2012
  • @DylanM. да. Прости. Мой код был обходом по порядку, но имя было обходом по предварительному заказу. Отредактировал это. 14.07.2012

Ответы:


1

В обычном двоичном дереве поиска время вставки в худшем случае фактически равно O (n). Вам нужно сбалансированное дерево, чтобы операции были O (log (n)).

Итак, в общем BST ваш подход позволяет вам сортировать за O (n ^ 2).

13.07.2012
  • Спасибо. И да, я понимаю худший случай. Было интересно, почему эта сортировка нигде не упоминалась! Я думал, что нашел что-то принципиально новое. : D 13.07.2012
  • Мы говорили об этом в моем классе структур данных, но я могу представить, если люди не будут много говорить об этом, потому что это излишне сложно по сравнению с другими алгоритмами сортировки O (nlogn) и, вероятно, на практике немного медленнее. При этом, если вы используете дерево AVL или какое-либо другое дерево, которое имеет гарантированные O (logn) вставки, то это теоретически соответствует сортировке слиянием (по временной и пространственной сложности). Что-то похожее, что может вас заинтересовать, - это Heapsort. 13.07.2012
  • Новые материалы

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

    Почему шаблоны проектирования и почему нет?
    Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..

    Создание дизайна обуви с помощью машинного обучения
    Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..