Java Poset симуляция - PullRequest
       10

Java Poset симуляция

0 голосов
/ 25 июня 2011

Я хочу смоделировать набор, называемый, скажем, x, размером 2n в java вида a_1

Я хочу запустить итерацию, чтобы получить случайное линейное расширение, с помощью которого я сравниваю «размер» каждого объекта, и, если можно переключить две соседние позиции, я делаю это, если нет, то я придерживаюсь, чтобы закончить с новым порядком.Например, x [i] = a_k и x [i + 1] = b_k я переключаю их, однако, если x [i] = a_k и x [i + 1] = a_ (k + 1), я бы этого не сделал.(По сути, это цепь Карзанова Хачияна).

Сначала я подумал об использовании массива массивов, где x [] [] = {a_1 [], ..., b_1 [], ...}, где, скажем, a_1 = {a, 1},где я мог бы сравнить значения и легко сделать переключение.Теперь я пытаюсь придумать другие способы сделать это, так как из моего предыдущего вопроса я вижу, что это не будет особенно эффективным или элегантным способом сделать это.У кого-нибудь есть предложения?

1 Ответ

3 голосов
/ 25 июня 2011

Ну, во-первых, мне нравится ваша идея хранить всю цепочку в массиве. Я думаю, что это будет хорошо работать.

Но я согласен с вами, что "вложенный" массив,

{ {'a', 1}, {'a', 2}, ... }

вероятно будет немного раздражать. Задумывались ли вы сделать класс, как

class Elem {
    String symbol;
    int subscript;
}

Затем вы можете написать компаратор, чтобы сказать, меньше ли один элемент, чем другой:

Comparator<Elem> comp = new Comparator<Elem>() {
    public int compareTo(Elem e1, Elem e2) {
        // return -1 if e1<e2, +1 if e2<e1, 0 otherwise
    }
    public boolean equals(Elem e1, Elem e2) {
        // ...
    }
};

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

...