Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Heaps Algorithmus
Kikolo
myCSharp.de - Member



Dabei seit:
Beiträge: 6

Themenstarter:

Heaps Algorithmus

beantworten | zitieren | melden

Guten Morgen,
Ich möchtes den oben genannten Algorithmus in c# implementieren. Den pseudocode habe ich auf Wikipedia gefunden. Nachdem ich keine Lösung gefunden habe habe ich gegoogelt.



public static IEnumerable<IEnumerable<T>> Permute<T>(this IList<T> v)
{
    ICollection<IList<T>> result = new List<IList<T>>();

    Permute(v, v.Count, result);

    return result;
}

private static void Permute<T>(IList<T> v, int n, ICollection<IList<T>> result)
{
    if (n == 1)
    {
        result.Add(new List<T>(v));
    }
    else
    {
        for (var i = 0; i < n; i++)
        {
            Permute(v, n - 1, result);
            Swap(v, n % 2 == 1 ? 0 : i, n - 1);
        }
    }
}

private static void Swap<T>(IList<T> v, int i, int j)
{
    var t = v[i];
    v[i] = v[j];
    v[j] = t;
}



Könnte das vielleicht jemand Zeile für Zeile mit mir durchgehen? Ich verstehe nicht genau was es mit den typparametern auf sich hat. Es wirkt auf mich wie generics aber so ganz fällt der Groschen nicht. Irgendwie sitze ich einfach auf dem Schlauch was genau da passiert.
Kann mir jemand helfen?
private Nachricht | Beiträge des Benutzers
Jompikumpi
myCSharp.de - Member



Dabei seit:
Beiträge: 46

beantworten | zitieren | melden

Setze einen Breakpoint in der Erweiterungsfunktion Permute, dann erstelle eine Liste mit mehreren Elementen, rufe damit Permute auf und erfreue dich am Debugger, der alles Schritt für Schritt mit dir durchgeht.

[Artikel] Debugger: Wie verwende ich den von Visual Studio?
private Nachricht | Beiträge des Benutzers
Kikolo
myCSharp.de - Member



Dabei seit:
Beiträge: 6

Themenstarter:

beantworten | zitieren | melden

Du hast die Methode „erweiterungsfunktion“ genannt. Ich dachte eigentlich es sei eine generische Methode? Oder eine generische Erweiterungsmethode also eine Kombination aus einer generischen Methode und einer Erweiterungsmethode. Stimmst du mir da zu oder ist mein Eindruck falsch?
private Nachricht | Beiträge des Benutzers
lukasrad02
myCSharp.de - Member



Dabei seit:
Beiträge: 7

beantworten | zitieren | melden

Hallo Kikolo,

alle deiner Methoden sind generisch, zu erkennen am Typparameter T. Zusätzlich ist die Methode public static IEnumerable<IEnumerable<T>> Permute<T>(this IList<T> v) eine Erweiterungsmethode, zu erkennen am this vor dem ersten Parameter. Das bedeutet, dass sie wie eine Methode des Typs, den du erweiterst (hier ILIst<T>), aufgerufen werden kann. Weitere Informationen dazu findest du auch in der Doku https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/extension-methods (Docs)
private Nachricht | Beiträge des Benutzers
Stefan.Haegele
myCSharp.de - Member

Avatar #avatar-3068.jpg


Dabei seit:
Beiträge: 463
Herkunft: Untermeitingen

beantworten | zitieren | melden

Evtl. wäre hier ein Studium der Grundlagen sehr hilfreich - ohne diese wirst du keine Freude an C# haben...

[FAQ] Wie finde ich den Einstieg in C#?
[Hinweis] Bitte schau in die SDK-/MSDN-Doku
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Stefan.Haegele am .
private Nachricht | Beiträge des Benutzers