Это действительно зависит от особенностей вашей установки. Если у вас многоядерный аппарат, вы можете, скорее всего, отсортировать строки очень быстро, используя parallel version of quicksort, в котором каждый рекурсивный вызов выполняется параллельно друг другу. Со многими ядрами это может занять уже быструю сортировку и сделать ее значительно быстрее. Другие алгоритмы сортировки, такие как сортировка слияния, также могут быть распараллелены, хотя параллельная quicksort имеет то преимущество, что требует меньше дополнительной памяти. Поскольку вы знаете, что вы сортируете строки, вы также можете посмотреть в parallel radix sort, что потенциально может быть чрезвычайно быстрым.
Большинство двоичных деревьев поиска не могут быть многопоточными, поскольку операции по балансировке часто требуют одновременного изменения нескольких частей дерева, поэтому сбалансированное красное/черное дерево не может быть лучшим подходом здесь. Тем не менее, вы можете посмотреть в concurrent skiplist, который представляет собой структуру данных, которая может быть выполнена для эффективной работы параллельно. Есть несколько новых деревьев двоичного поиска, предназначенных для параллелизма, которые иногда превосходят skiplist (here is one such data structure), хотя я ожидаю, что будет меньше существующих реализаций и обсуждения этих новых структур.
Если элементы не изменяются часто или вам нужен только порядок сортировки один раз, то просто сортировка один раз с помощью параллельной быстрой сортировки - это, вероятно, лучший вариант. Если элементы часто меняются, то параллельная структура данных, такая как параллельный скипист, вероятно, станет лучшей ставкой.
Надеюсь, это поможет!
Собираетесь ли вы динамически добавлять элементы? – dasblinkenlight
Убедитесь, что в лучшем случае не используется какая-либо полная система реляционных баз данных. – zch
Я единственный, кто не думает, что 287 843 строки * огромные *? Сортировка только индексов или указателей может быть выполнена в течение секунды на одном ядре. Зачем нужна многопроцессорная система? Домашнее задание? – wildplasser