Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo,

ich suche nach einem Algorithmus, der mir aus einer Menge L von Zahlen alle unterschiedlichen Untermengen der Länge k generiert.

Für den Namen eines solchen Algorithmus wäre ich sehr dankbar, bzw. einen Link oder derartiges, der die genaue Funktionsweise erklärt (ev. mit Implementierung in höherer Programmiersprache, vorzugsweise Java).

Habe mich bereits im Netz umgeschaut, bin aber nur auf die Algorithmen gestoßen, die alle Permutationen generieren. Ich habe keine Algorithmen gefunden, die alle unterschiedlichen Mengen mit k Elementen generieren. Letztendlich läuft das Ganze ja auf den Binomialkoeffizienten heraus.

Die Aufgabe ist also: Generiere aus dem Array a der Länge 5 alle unterschiedlichen Untermengen mit 2 Elementen.

Dann müssten ja insgesamt 5 über 2 = 10 Möglichkeiten herauskommen.

LG

Wenn Du alle Mengen brauchst, ist das eh NP-vollständig und wird bei entsprechend großen Mengen nicht mehr effizient funktionieren. Man müsste über den Bahn-Stabilisator-Algorithmus die entsprechenden Permutationen bei großen Mengen konstruieren können. Letztendlich bleibt das Problem aber NP-vollständig.

Wenn Du alle Mengen brauchst, dann musst Du sie eben iterativ konstruieren.

Wenn Du alle Mengen brauchst, dann musst Du sie eben iterativ konstruieren.

Wie schaffe ich das aber? Die naive Methode wäre ja, wenn man beispielsweise alle 3 elementigen Untermengen haben möchte, 3 for-Schleifen zu machen. Dann würde man die entsprechenden Kombinationen herausbekommen. Aber wie programmiere ich ein solches Verfahren so, dass es auch funktioniert, wenn ich 2er Paare haben will oder 4-er Tupel?

Tut mir Leid, habe leider nicht viel Ahnung von so etwas.

PS: Wie heißt der Algorithmus eigentlich auf Englisch, weil so auf die Schnelle finde ich keine Implementierungen oder ähnliches

Bearbeitet von Fridge

Die naive Methode wäre ja, wenn man beispielsweise alle 3 elementigen Untermengen haben möchte, 3 for-Schleifen zu machen.

Nein, muss man nicht, sondern man konstruiert die Mengen rekursiv.

PS: Wie heißt der Algorithmus eigentlich auf Englisch, weil so auf die Schnelle finde ich keine Implementierungen oder ähnliches

Gruppenoperation

GAP Manual: 8.16 Orbits

GAP Manual: 8.22 Stabilizer

Eine fertige Implementierung ist mir nicht bekannt, denn es kommt gerade bei großen Mengen auch auf effiziente Datenstrukturen an

Also zur Erklärung: So groß werden die Mengen nicht also wenn man das von Binomialkoeffizient her betrachtet, dann ist der obere Wert(max. vllt. so 10) nur minimal größer als der untere. Also am Ende hat man relativ wenige Untermengen. Das Problem ist, wie du ja sagst, dass die Menge die rauskommt nicht so viele Elemente hat, dass es aber sehr rechenintensiv ist, diese Untermengen zu erzeugen.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.