Als Franck und Rémi sagte, Ihre Listen zu Sätzen (von stdlib Modul Set) Umwandlung Kosten n log (n), und stellt dann liefert eine lineare Umsetzung der Kreuzung. Franck erwähnte auch die äquivalente Alternative, um die Listen zu sortieren und sie dann synchron zu durchlaufen. Diese sind ungefähr gleich (und in beiden Fällen müssen Sie in der Lage sein, eine vollständige Reihenfolge der Elemente in Ihren Listen anzugeben).
Wenn Kreuzungen ein wichtiger Teil Ihres Algorithmus sind und Sie wollen, dass sie im Fall von zwei Gruppen von Elementen, schneller sein, die nur geringfügig unterschiedlich sind, müssen Sie eine zusammenführbar Struktur wechseln wie Patricia Bäume. Siehe Dateien pt*
in http://www.lri.fr/~filliatr/ftp/ocaml/ds/.
Wenn Sie eine Kreuzung benötigen, um in allen Fällen schnell zu sein, haben Sie die Möglichkeit, Hash-konzedierte Patricia-Bäume zu verwenden. Hash-Consing hilft dabei, strukturell identische Sub-Bäume zu erkennen, und hilft, effiziente Caches für frühere Operationen zu erstellen, indem Vergleich billig gemacht wird.
Patricia-Bäume können keinen beliebigen Typ als Schlüssel verwenden (normalerweise werden sie mit Ints als Schlüssel dargestellt). Sie können diese Einschränkung jedoch manchmal umgehen, indem Sie bei der Erstellung jeden Wert nummerieren, den Sie als Schlüssel verwenden möchten.
OCaml tun oper gesetzt haben ation: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Set.S.SHTML Beachten Sie, dass Bot-Lösungen hinsichtlich der Komplexität äquivalent sind (mit Ocaml-Set). –