Je recherche des documents de recherche ou des écrits en appliquant l'algorithme Longest Common Subsquence aux tables SQL pour obtenir une vue diff de données. D'autres suggestions sur la façon de résoudre un problème de table diff sont également les bienvenues. Le défi étant que les tables SQL ont cette mauvaise habitude de geting assez grand et d'appliquer des algorithmes simples conçus pour le traitement de texte peut donner lieu à un programme qui ne finit jamais ...diff de données SQL: plus longue sous-séquence commune
donc donné une table 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
et la table 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
Je dois trouver le 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
Pour être clair, le 'key' rend une ordonnance sur les lignes, sinon des termes comme « séquence » et « séquence » ne changerait rien sens sur un ensemble non ordonné (comme une table relationnelle). –
N'oubliez pas que les tables n'ont pas, en théorie, d'ordre pour les lignes - ce qui complique aussi les choses. Vous devez définir un ordre pour les comparaisons de table. –
Je ne pense pas que ce soit différent du problème habituel: le mieux que vous pouvez faire est O (n^2) (en ignorant le temps de comparer les lignes de table) où n est le nombre de lignes. Si vous savez qu'aucune ligne ne se déplace de plus de k positions, vous pouvez le faire en O (nk) en modifiant l'algorithme de programmation dynamique habituel. Vous devrez probablement supposer quelque chose comme ceci, avec un k raisonnablement petit, si n^2 est trop grand. – ShreevatsaR