2016-04-11 13 views
7

Tôi rơi qua a spreadsheet giải thích phương thức sắp xếp cả hàng và cột của ma trận chứa dữ liệu nhị phân sao cho số lượng thay đổi giữa các hàng liên tiếp và cột được giảm thiểu.Thuật toán để sắp xếp các hàng và cols theo độ tương tự

Ví dụ, bắt đầu với:

initial table

Sau 15 bước thủ công được mô tả trong các tab của spreadsheed, bảng dưới đây thu được:

final result

Tôi muốn biết:

  1. tên chung của thuật toán hoặc phương pháp này là gì?
  2. cách áp dụng nó vào bảng lớn hơn (trong đó 2^n sẽ tràn ...)
  3. cách khái quát hóa dữ liệu đó thành dữ liệu nhị phân, chẳng hạn bằng khoảng cách Levenshtein?
  4. nếu có bất kỳ liên kết đến mã (Excel VBA, Python, ...) đã thực hiện điều này (nếu không tôi sẽ viết nó ...)

Cảm ơn!

+1

Đây là con đường đuilton euclide trong {0,1}^n; Tôi nghĩ rằng có thể có các thuật toán xấp xỉ yếu tố liên tục vì hampath liên quan chặt chẽ với TSP (cả hampath và TSP là khó cho đồ thị chung), và chúng ta có các thuật toán xấp xỉ cho TSP, nhưng không mong đợi để giải quyết nó tối ưu - mặc dù Tôi không hoàn toàn chắc chắn rằng một bằng chứng cứng cho không gian cụ thể này tồn tại, tôi sẽ ngạc nhiên nếu điều này là trong P. Tôi không biết những gì VBA có thể làm, vì vậy tôi không thể cho bạn biết liệu bạn có thể thực hiện một xấp xỉ thuật toán ở đó. –

+2

Có một cái nhìn thứ hai, khoảng cách thực sự không phải là euclide, nhưng khoảng cách Hamming; Tôi không biết bằng chứng về độ cứng hoặc thuật toán xấp xỉ cho cái đó, nhưng chúng có thể tồn tại. –

+1

Liên quan: [Mã màu xám] (https://en.wikipedia.org/wiki/Gray_code), cũng có sẵn dưới dạng biến thể n-ary. – Norman

Trả lời

2

Bạn có thể đại diện cho mỗi hàng bởi một vector L = [1, 1, 0, ... 1], và sau đó xác định khoảng cách giữa hai dòng d(L0, L1) bằng số phần tử tại các vị trí đó là khác nhau giữa L0L1 tương ứng. Điều này được gọi là nhị phân Hamming distance. Nếu bạn có dữ liệu không nhị phân, bạn sẽ chỉ mở rộng định nghĩa của khoảng cách và có, khoảng cách Levenshtein sẽ là một lựa chọn.

Khi bạn có khoảng cách được xác định rõ, phần còn lại của sự cố sẽ giảm thiểu khoảng cách giữa các hàng liên tiếp. Đây chính xác là Traveling salesman problem, được biết là NP-hard (http://www.diku.dk/hjemmesider/ansatte/jyrki/Paper/EKP85.pdf).

Giải pháp trực tiếp (truy cập tất cả hoán vị) là O (n!), Nhưng bạn có thể thực hiện dễ dàng hơn bằng cách sử dụng lập trình động, ví dụ Held–Karp_algorithm. Ngoài ra còn có các thuật toán gần đúng, chẳng hạn như Nearest_neighbour_algorithm nhanh chóng tính toán một giải pháp không tối ưu.

Cuối cùng, để triển khai, bạn có thể dễ dàng google "đi du lịch nhân viên bán hàng excel/python" và tìm nhiều hướng dẫn và ví dụ.

Các vấn đề liên quan