Ik zit met een vraagje (meer uit interesse dan omdat het moet. :p).
Ik heb twee identieke, geïndexeerde lijsten (tabellen, liever gezegd, maar dat terzijde). Zie hier:
Code:
+-------+-------------+--------------------------+ +-------+-------------+--------------------------+
| index | Document | Patroon | | index | Document | Patroon |
+-------+-------------+--------------------------+ +-------+-------------+--------------------------+
| 0 | intro_info | [1, 2, 3, 1, 2, 2, 2, 3] | | 0 | intro_info | [1, 2, 3, 1, 2, 2, 2, 3] |
+-------+-------------+--------------------------+ +-------+-------------+--------------------------+
| 1 | richtlijnen | [1, 2, 3] | | 1 | richtlijnen | [1, 2, 3] |
+-------+-------------+--------------------------+ +-------+-------------+--------------------------+
| 2 | contract v3 | [1, 2, 2, 2, 2, 2, 3] | | 2 | contract v3 | [1, 2, 2, 2, 2, 2, 3] |
+-------+-------------+--------------------------+ +-------+-------------+--------------------------+
Links lijst 1, rechts lijst 2. Deze kunnen net zo lang worden als nodig en beginnen te tellen bij 0.
Wanneer de indices gelijk zijn, willen we niet vergelijken, anders wel. We hebben 'm al subkwadratisch door ervoor te zorgen dat wanneer beide indices gelijk zijn, de inner loop niet uitgevoerd wordt, maar ik was dus benieuwd of een O(n) (of in ieder geval sneller dan een subkwadratisch) algoritme ook mogelijk is, aangezien deze lijsten akelig lang kunnen gaan worden.
0,1 (rij 0 in lijst 1, rij 1 in lijst 2) is equivalent aan 1,0, in dit geval. Is het mogelijk om een algoritme te ontwerpen dat alle (x,x) coördinaten overslaat èn dat de inverses van al gedane verglijkingen ook overslaat? Ik heb er wel naar zitten kijken, maar kwam per ongeluk op een zigzag-algoritme dat niet echt werkt. :D
Of is het misschien sneller en makkelijker om die dingen er zelf uit te werken en dan te vergelijken?