none
Alle Kombination von Werten ausgeben RRS feed

  • Frage

  • Hallo,

    ich lese aus einem String verschiedene Substrings aus, abhängig von bestimmten Trennzeichen, es kann also sein, dass ich dann in einem Array 1-n verschiedene Strings habe..

    Jetzt möchte ich jede mögliche Kombination der Strings ausgeben, Bedingung aber hierbei, dass immer alle ausgegen werden.

    Bsp:
    Werte:
    - String 1
    - String 2

    Ausgabe:
    - String1 String2
    - String2 String1

    Das Problem, die Formel zu Berechnung der Anzahl wäre ja A=N!/(N-k)! * k!, wenn die N und k aber gleich sind, also die Anzahl der Auswahlwerte der Anzahl der Auszuwählenden Werte entspricht, ergibt sich im Divisor 0..

    Wo ist mein Denkfehler, und wie kann ich das Programmtechnisch umsetzen??

    Danke für die Hilfe!!
    Sonntag, 25. Oktober 2009 19:48

Antworten

  • Hallo KiloMike,

    schau dafür mal hier vorbei: http://www.codeproject.com/KB/recipes/Combinatorics.aspx

    Viel Erfolg!
    Mathias
    Montag, 26. Oktober 2009 12:25
  • Hallo KiloMike,

    Hier gibt es ein Artikel der zeigt wie man Alle Kombination von Werten ausgeben kann.


    http://dotnet.sys-con.com/node/231946

    Aus dem Beispiel Artikel Man muss man die StringCombinationsLib kompilieren und eine dll erstellen.

    Nachher kann man die dll in der Anwendung referenzieren.

    Die Anwendung wurde dann in C# so aussehen:


    using System;
    using System.Text;
    
    
    namespace Combinations
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    Console.WriteLine(Environment.NewLine + "Begin string combination demo" + Environment.NewLine);
                    string[] animals = new string[] { "ant", "bat", "cow", "dog", "elk" };
    
                    int i;
                    Console.Write("The original set of string elements is: [ ");
                    for (i = 0; i <= animals.Length - 1; i++)
                    {
                        Console.Write(animals[i] + " ");
                    }
                    Console.WriteLine("]" + Environment.NewLine);
    
                    int n = animals.Length;
                    Console.WriteLine("Size original elements (n) = " + n);
                    Console.Write("Enter your subset size (k) : ");
                    int k;
    
                    k = Convert.ToInt32(Console.ReadLine());
    
                    Console.WriteLine(Environment.NewLine + "There are " + StringCombinationsLib.StringCombination.Choose(n,k) + " elements ");
    
                    StringCombinationsLib.StringCombination c = new StringCombinationsLib.StringCombination(animals, k);
    
                    Console.WriteLine(Environment.NewLine + "The combination elements are: ");
                    i = 0;
                    while (c != null)
                    {
                        Console.WriteLine("[" + i + "] " + c.ToString());
                        i = i + 1;
                        c = c.Successor();
                    }
                    Console.WriteLine(Environment.NewLine + "End demo");
                    Console.ReadLine();
                }
    
                catch (Exception ex)
                {
                    Console.WriteLine("Fatal error: " + ex.Message);
                    Console.ReadLine();
                }
    
    
            }
        }
    }



     

    Grüße,

    Robert

    Montag, 9. November 2009 13:37

Alle Antworten

  • Hallo KiloMike,

    0! = 1. Problem gelöst?

    Viele Grüße
    Mathias
    Sonntag, 25. Oktober 2009 22:13
  • Was die Mathematik angeht: Ja...

    Jetzt würde mich interessieren, ob jmd ne Idee hat, wie man jetzt im Programm jede mögliche Kombination abfragen kann.. Die Anzahl, für eine Schleife, hab ich ja schonmal ;)
    Montag, 26. Oktober 2009 07:19
  • Hallo KiloMike,

    schau dafür mal hier vorbei: http://www.codeproject.com/KB/recipes/Combinatorics.aspx

    Viel Erfolg!
    Mathias
    Montag, 26. Oktober 2009 12:25
  • Hallo KiloMike,

    Hier gibt es ein Artikel der zeigt wie man Alle Kombination von Werten ausgeben kann.


    http://dotnet.sys-con.com/node/231946

    Aus dem Beispiel Artikel Man muss man die StringCombinationsLib kompilieren und eine dll erstellen.

    Nachher kann man die dll in der Anwendung referenzieren.

    Die Anwendung wurde dann in C# so aussehen:


    using System;
    using System.Text;
    
    
    namespace Combinations
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    Console.WriteLine(Environment.NewLine + "Begin string combination demo" + Environment.NewLine);
                    string[] animals = new string[] { "ant", "bat", "cow", "dog", "elk" };
    
                    int i;
                    Console.Write("The original set of string elements is: [ ");
                    for (i = 0; i <= animals.Length - 1; i++)
                    {
                        Console.Write(animals[i] + " ");
                    }
                    Console.WriteLine("]" + Environment.NewLine);
    
                    int n = animals.Length;
                    Console.WriteLine("Size original elements (n) = " + n);
                    Console.Write("Enter your subset size (k) : ");
                    int k;
    
                    k = Convert.ToInt32(Console.ReadLine());
    
                    Console.WriteLine(Environment.NewLine + "There are " + StringCombinationsLib.StringCombination.Choose(n,k) + " elements ");
    
                    StringCombinationsLib.StringCombination c = new StringCombinationsLib.StringCombination(animals, k);
    
                    Console.WriteLine(Environment.NewLine + "The combination elements are: ");
                    i = 0;
                    while (c != null)
                    {
                        Console.WriteLine("[" + i + "] " + c.ToString());
                        i = i + 1;
                        c = c.Successor();
                    }
                    Console.WriteLine(Environment.NewLine + "End demo");
                    Console.ReadLine();
                }
    
                catch (Exception ex)
                {
                    Console.WriteLine("Fatal error: " + ex.Message);
                    Console.ReadLine();
                }
    
    
            }
        }
    }



     

    Grüße,

    Robert

    Montag, 9. November 2009 13:37
  • Hallo KiloMike,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Dienstag, 10. November 2009 10:10