2013-06-26 1 views
3

Я читаю о PriorityQueues в javadocs, и в нем упоминается термин tie-break. Я не мог понять, что означает этот термин. Надеюсь, кто-то может объяснить.Что означает разрыв связи?

+2

См. Http://en.wikipedia.org/wiki/Tiebreaker –

+3

@JonSkeet: Я тоже это видел. Ссылаясь на спортивную метафору, вряд ли можно осветить, особенно если вторым языком пользователя является английский. –

+0

@RobertHarvey: Я не согласен - я думаю, что в контексте документации («Глава этой очереди является наименьшим элементом в отношении указанного порядка.Если несколько элементов привязаны к наименьшему значению, голова является одним из этих элементов - - связи сломаны произвольно ») резюме википедии (« В играх и спортах тай-брейк или тай-брейк используется для определения победителя среди игроков или команд, которые связаны в конце конкурса или набора конкурсов »), должны достаточно, чтобы выработать смысл. –

ответ

3

Если у вас есть приоритетный Que, который использует Node.Score для назначения приоритета, если два счета одинаковы, у вас есть галстук.

Вы можете реализовать переключение между первым и первым в сопоставимых элементах. Если два показателя одинаковы, приоритет присваивается узлу, который был добавлен первым.

if(NodeA.getScore() == NodeB.getScore()){ 
    //this is a tie 
    if(NodeA.getOrderAdded() > NodeB.GetOrderAdded(){ 
     //NodeA has priority 
    } else { 
     //NodeB has priority 
    } 
} 
6

В Java, сравнение выполняется с использованием методы compare(a,b) (для компараторов) или a.compareTo(b) метода (для экземпляров классов, которые могут быть сопоставлены). Этот метод должен возвращать отрицательное число, когда a < b, положительное число, когда a > b и 0, когда a = b.

Однако иногда люди используют только возвращаемое значение 0 для обозначения a и b несравнимы (некоторые заказы не являются суммарными). В этом случае PriorityQueue должен решить, какой элемент идет первым. Это неразрывное соединение. В частности, некоторые очереди приоритетов сохраняют порядок, в который вставлены элементы с нулевым сравнением, поэтому в этом случае время вставки является тай-брейкером. Затем для набора элементов, где compareTo() всегда возвращает 0, очередь приоритетов будет действовать как обычная очередь.