2016-04-11 9 views
7

Wpadłem na a spreadsheet, który wyjaśnia metodę sortowania zarówno wierszy, jak i kolumn macierzy zawierającej dane binarne, tak aby liczba zmian między kolejnymi wierszami i kolkami była zminimalizowana.Algorytm sortowania wierszy i colów według podobieństwa

na przykład, wychodząc z:

initial table

po 15 ręcznych czynności opisane w zakładkach spreadsheed, w poniższej tabeli otrzymano:

final result

Chciałbym know:

  1. Jaka jest popularna nazwa tego algorytmu lub metody?
  2. jak zastosować go do większej tabeli (gdzie 2^n byłoby przepełnione ...)
  3. jak uogólnić ją na dane inne niż binarne, na przykład za pomocą odległości Levenshteina?
  4. , czy istnieje powiązanie kodu (Excel VBA, Python, ...) już realizuje to (w przeciwnym razie będę go pisać ...)

Dzięki!

+1

To jest euklidesowa ścieżka hammiltonowska w {0,1}^n; Myślę, że mogą istnieć algorytmy aproksymacji stałego czynnika, ponieważ hampath jest ściśle powiązany z TSP (zarówno hampath, jak i TSP są np. Trudne dla ogólnych wykresów) i mamy algorytmy aproksymacyjne dla TSP, ale nie spodziewamy się optymalnego rozwiązania - chociaż Nie jestem do końca pewny, czy istnieje dowód twardości dla tej konkretnej przestrzeni, byłbym zaskoczony, gdyby to było w P. Nie wiem, co potrafi VBA, więc nie mogę powiedzieć, czy można zaimplementować przybliżenie tam algorytm. –

+2

Po drugim spojrzeniu odległość nie jest faktycznie euklidesowa, ale odległość Hamminga; Nie znam algorytmów twardości ani algorytmów aproksymacji dla tego, ale prawdopodobnie istnieją. –

+1

Powiązane: [Kody Gray] (https://en.wikipedia.org/wiki/Gray_code), dostępne również w wariantach n-ary. – Norman

Odpowiedz

2

Można uzyskać każdy wiersz wektorem L = [1, 1, 0, ... 1], a następnie określić odległości pomiędzy dwoma liniami d(L0, L1) przez liczbę elementów w odpowiednich miejscach, które różnią się między L0 i L1. Jest to znane jako binarne Hamming distance. Gdybyś miał dane nie binarne, po prostu rozszerzyłbyś swoją definicję odległości i tak, odległość Levenshteina byłaby opcją.

Po dokładnym zdefiniowaniu odległości, resztą problemu jest zminimalizowanie odległości między kolejnymi wierszami. Jest to dokładnie Traveling salesman problem, znane jako NP-hard (http://www.diku.dk/hjemmesider/ansatte/jyrki/Paper/EKP85.pdf).

Bezpośrednim rozwiązaniem (odwiedzającym wszystkie permutacje) jest O (n!), Ale można to zrobić łatwiej dzięki programowaniu dynamicznemu, na przykład Held–Karp_algorithm. Istnieją również przybliżone algorytmy, takie jak Nearest_neighbour_algorithm, które szybko oblicza nieoptymalne rozwiązanie.

Na koniec, w przypadku implementacji możesz z łatwością google "traveller excel/python" i znaleźć wiele tutoriali i przykładów.

Powiązane problemy