Создание структуры данных (слияние связанного списка PQ?) - PullRequest
0 голосов
/ 27 февраля 2011

Поэтому мне нужно найти структуру данных для этой ситуации, которую я опишу: это не моя проблема, но объясняет аспект структуры данных, который мне нужен более кратко: у меня армия, состоящая из взводов.В каждом взводе есть количество мужчин и звание (самый высокий - лучший).Если бы враг напал на мою армию, он убил бы немного МОЩНОСТИ моей армии, начиная с самого слабого взвода и работая там, где требуется (мощность взвода) количество силы, чтобы убить каждого солдата из взвода.

Я мог легко смоделировать врагов, нападающих на меня, заглядывая и выталкивая элементы из моей приоритетной очереди взводов, упорядоченной по номеру ранга, но это не то, что мне нужно делать.Мне нужно, чтобы у врагов была возможность видеть всех солдат, которых они убьют, если они нападут на меня, без фактической атаки, то есть без фактического удаления элементов из моей очереди приоритетов (если я реализовал это как pq).

Sidenote: Java PriorityQueue.Iterator () печатает элементы в случайном порядке, я знаю, что итератор - это все, что мне нужно, просто к сведению.

Проблема в том, что если я реализовал это как pq, я могу видеть тольковерхний элемент, так что мне нужно было бы расстегнуть взводы, как если бы они умирали, а затем оттолкнуть их назад, когда мысль об атаке будет рассчитана.Я мог бы также реализовать это как связанный список или массив, но вставка занимает слишком много времени.В конечном счете, я бы хотел использовать очередь с приоритетами, мне просто нужна возможность просмотреть либо элемент (выбрать индекс) из pq, либо чтобы каждый объект в pq имел указатель на следующий объект в pq, напримерсвязанный список.

Эта мысль о поддержке указателей с pq, как связанный список, возможна в PriorityQueue java?Это реализовано для меня где-нибудь в PriorityQueue, о котором я не знаю?Реализуется ли индекс?Есть ли другая структура данных, которую я могу использовать, которая может лучше служить моей цели?Реально ли мне найти исходный код Java PriorityQueue и переписать его на моем компьютере, чтобы поддерживать эти указатели в виде связанного списка?Любые идеи очень приветствуются, не совсем уверен, какой путь я хочу выбрать на этом.

1 Ответ

0 голосов
/ 27 февраля 2011

Одна вещь, которую вы могли бы сделать, - расширенное дерево бинарного поиска . Это позволило бы получить эффективный доступ к n-му наименьшему элементу, сохраняя при этом порядок элементов. Вы также можете использовать потоковое двоичное дерево поиска . Это позволит вам переходить от одного элемента к следующему большему за постоянное время, что быстрее, чем в обычном двоичном дереве. Однако обе эти структуры данных работают медленнее, чем куча.

...