Ich versuche, einen Algorithmus in C # zu erstellen, der die folgenden Ausgabezeichenfolgen erzeugt:
%Vor%Was ist der beste Weg, dies zu erreichen?
%Vor%Nun, wenn die Länge eine Konstante 4 ist, dann würde dies damit umgehen:
%Vor%Wenn die Länge ein Parameter ist, würde diese rekursive Lösung damit umgehen:
%Vor%Es gibt immer die obligatorische LINQ-Implementierung. Meistens Quatsch-Performance, aber seit wann hinderte Performance die Nutzung cooler neuer Features?
%Vor%'Sequenz' ist jetzt ein IQueryable, das AAAA bis ZZZZ enthält.
Bearbeiten:
Ok, also nervte es mich, dass es möglich sein sollte, mit LINQ eine Sequenz konfigurierbarer Länge mit einem konfigurierbaren Alphabet zu erstellen. Hier ist es also. Wieder völlig sinnlos, aber es nervte mich.
%Vor%Der Aufruf der Sequence-Methode erzeugt die gleiche AAAA bis ZZZZ-Liste wie zuvor, aber jetzt können Sie das verwendete Wörterbuch und die Länge der erzeugten Wörter ändern.
Nur ein Kommentar zu Garry Shutler, aber ich möchte Code-Färbung:
Sie müssen es nicht wirklich machen, weder die Art, noch die zweite Methode. Ein Schritt ist es, Aggregat für das Cross-Produkt zu verwenden, es endet wie folgt:
%Vor%Anders sollte einen Nobelpreis für die Linq-Sache bekommen!
Python!
(Das ist nur ein Hack, nimm mich nicht zu ernst: -)
%Vor%Inspiriert von Garry Shutlers Antwort habe ich beschlossen, seine Antwort in T-SQL zu rekodieren.
Sagen Sie "Buchstaben" ist eine Tabelle mit nur einem Feld, MyChar, ein CHAR (1). Es hat 26 Zeilen, jeweils einen Buchstaben des Alphabets. Wir hätten also (Sie können diesen Code auf SQL Server kopieren und einfügen, um ihn in Aktion zu sehen):
%Vor%Die Vorteile sind: Es ist leicht erweiterbar in die Verwendung von Groß- / Kleinbuchstaben oder die Verwendung von nicht-englischen lateinischen Zeichen (denken Sie "Ñ" oder Cedille, Eszets und dergleichen) und Sie würden immer noch einen geordneten Satz bekommen, nur müssen Fügen Sie eine Kollatierung hinzu. Plus SQL Server führt dies etwas schneller als LINQ auf einem einzelnen Core-Rechner aus, bei Multicore (oder Multiprozessoren) kann die Ausführung parallel erfolgen, was noch mehr Schub bringt.
Leider bleibt es für den Fall mit 4 Buchstaben stecken. Die rekursive Lösung von lassevk ist allgemeiner, der Versuch, eine allgemeine Lösung in T-SQL zu erstellen, würde notwendigerweise dynamisches SQL mit all seinen Gefahren bedeuten.
Verwenden Sie etwas, das automatisch für jede einzelne Buchstabenkombination googelt, dann sehen Sie, ob es mehr ".sz" oder ".af" Treffer gibt, dann ".com" trifft auf die ersten fünf Ergebnisse ...;)
Im Ernst, was du suchst, ist vielleicht Tries (Datenstruktur), obwohl du immer noch befüllen musst , was wahrscheinlich viel schwieriger ist ...
Ein sehr einfacher aber genialer Code, der alle Wörter von 3 und 4 Buchstaben der englischen Sprache erzeugt
%Vor%