2015-07-16 2 views
1

Как я мог построить структуру неупорядоченной пары в Matlab?Как построить структуру неупорядоченной пары в Matlab?

Обозначим через E такую ​​структуру, где E = {(i, j), (k, p), ...} и (i, j) = (j, i). Итак, как построить E в Matlab? Какие-либо предложения ?

Спасибо заранее

+2

Вы можете использовать отсортированные массивы длины 2. Всегда сохраняя их сортировку, вы можете легко сравнить их, и вы сохраните оба [2,1] и [1,2] таким же образом. –

+0

@BasSwinckels Большое спасибо – guanglei

+0

@BasSwinckels, но проблема в том, хочу ли я запросить, если [2,1] находится в неупорядоченном наборе или нет, что мне делать? – guanglei

ответ

1

Что Bas Swinckels предложил один из способов хранения наборов эффективной. Поскольку каждый из ваших кортежей содержит два элемента, я бы использовал матрицу с тремя ограничениями:

  1. В каждой строке первый элемент меньше второго. Сортировка, если это необходимо. Таким образом, топор (i, j) и (j, i) получает одно и то же представление.
  2. Убедившись, что строки должны быть уникальными, чтобы каждый элемент присутствовал только один раз.
  3. Чтобы иметь уникальное представление для наборов, отсортируйте строки.

Для любого входа, можно обеспечить три свойства, используя этот код:

>> M=[1,2;2,1;3,2;1,3;3,1] 

M = 

    1  2 
    2  1 
    3  2 
    1  3 
    3  1 

>> sortrows(unique(sort(M,2),'rows')) 

ans = 

    1  2 
    1  3 
    2  3 

(sortrows избыточно для большинства версий MatLab, потому что unique alreads сорта)

Альтернатива матрицы представления a cell:

{[1,2],[1,3],[2,3]} 

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

+0

Спасибо, много. Очень полезно ! – guanglei

+0

спасибо, но проблема в том, хочу ли я запросить, если [2,1] находится в неупорядоченном наборе или нет? – guanglei

0

Все симметричные матрицы, имеющие одинаковые строки и столбца могут удовлетворить ваши необходимые условия:

a = zeros(3) или b = ones(2)

Эти две матрицы являются примерами, которые являются такими же, если вы измените свои строки и столбцы, означает:

a(i, j) = a(j, i);

Надеюсь, это может вам помочь.

Смежные вопросы