Heim >Backend-Entwicklung >C++ >Wie kann ich effizient Kombinationen in C generieren?

Wie kann ich effizient Kombinationen in C generieren?

DDD
DDDOriginal
2024-12-02 00:11:11538Durchsuche

How Can I Efficiently Generate Combinations in C  ?

Kombinationen effizient in C generieren

Kombinationen in C zu bestimmen kann eine anspruchsvolle Aufgabe sein, insbesondere wenn Sie nach einer flexiblen Lösung suchen, die unterschiedliche Eingabewerte verarbeitet.

Ein durchdachter Ansatz für dieses Problem besteht darin, die Funktion next_permutation aus der Standard-C-Bibliothek zu verwenden. Diese Funktion generiert alle Permutationen eines Vektors inkrementell. So können Sie diese Funktion nutzen:

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    int n, r;
    std::cin >> n;
    std::cin >> r;

    std::vector<bool> v(n);
    std::fill(v.end() - r, v.end(), true);

    do {
        for (int i = 0; i < n; ++i) {
            if (v[i]) {
                std::cout << (i + 1) << " ";
            }
        }
        std::cout << "\n";
    } while (std::next_permutation(v.begin(), v.end()));
    return 0;
}

Dieser Ansatz erstellt effektiv ein Auswahlarray (v) mit r Selektorwerten. Anschließend durchläuft es alle Permutationen dieses Auswahlarrays und gibt die entsprechenden Mengenmitglieder für ausgewählte Positionen aus.

Wenn Sie beispielsweise die Eingabe „5 2“ (S = {1, 2, 3, 4) bereitstellen , 5} und r = 2) gibt dieser Algorithmus Folgendes aus:

1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5

Diese Methode bietet eine effiziente und verallgemeinerte Lösung zum Erzeugen von Kombinationen in C .

Das obige ist der detaillierte Inhalt vonWie kann ich effizient Kombinationen in C generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn