Tôi đang tìm các bài viết hoặc bài viết nghiên cứu áp dụng thuật toán Longest Common Subsquence cho các bảng SQL để có được chế độ xem dữ liệu khác. Các sugestions khác về cách giải quyết một vấn đề khác biệt bảng cũng được hoan nghênh. Thách thức được rằng bảng SQL có thói quen khó chịu này của geting thay BIG và áp dụng các thuật toán đơn giản được thiết kế cho việc xử lý văn bản có thể dẫn đến một chương trình mà không bao giờ kết thúc ...Khác biệt dữ liệu dựa trên SQL: subsequence phổ biến dài nhất
nên được đưa ra một bảng Original
:
Key Content
1 This row is unchanged
2 This row is outdated
3 This row is wrong
4 This row is fine as it is
và bảng New
:
Key Content
1 This row was added
2 This row is unchanged
3 This row is right
4 This row is fine as it is
5 This row contains important additions
tôi cần phải tìm ra Diff
:
+++ 1 This row was added
--- 2 This row is outdated
--- 3 This row is wrong
+++ 3 This row is right
+++ 5 This row contains important additions
Chỉ cần rõ ràng, 'Khóa' áp đặt một hàng trên các hàng, nếu không các thuật ngữ như 'chuỗi' và 'subsequence' sẽ không ý nghĩa trên một tập hợp không có thứ tự (như một bảng quan hệ). –
Đừng quên rằng các bảng không, theo lý thuyết, có bất kỳ thứ tự nào cho các hàng - điều này cũng làm phức tạp mọi thứ. Bạn phải xác định thứ tự cho các so sánh bảng. –
Tôi không nghĩ rằng đây là bất kỳ khác nhau từ các vấn đề thông thường: tốt nhất bạn có thể làm là O (n^2) (bỏ qua thời gian để so sánh các hàng bảng) trong đó n là số hàng. Nếu bạn biết rằng không có hàng nào di chuyển nhiều hơn k vị trí, bạn có thể làm điều đó trong O (nk) bằng cách sửa đổi thuật toán lập trình động thông thường. Bạn có thể sẽ phải giả định một cái gì đó như thế này, với một số k hợp lý nhỏ, nếu n^2 là quá lớn. – ShreevatsaR