C#実装配列組合せアルゴリズムの完全な例
2660 ワード
配列組合せはよく見られる数学的問題であり,本稿では,配列組合せアルゴリズムを実現するための完全な例として述べた.皆さんの参考にしてください.具体的な方法は以下の通りです.
まず、数学における配列の組み合わせは、配列P(N,R)
実は配列は実現して、組み合わせはすぐ実現して、組み合わせC(N,R)はP(N,R)/P(R,R)で、この機能を実現するのは比較的に簡単なのは再帰アルゴリズムで、しかし再帰の性能を考慮して、以下は2種類の非再帰の方法を採用して、具体的なコードは以下の通りです
本稿で述べたことが皆さんのC#プログラム設計に役立つことを願っています.
まず、数学における配列の組み合わせは、配列P(N,R)
実は配列は実現して、組み合わせはすぐ実現して、組み合わせC(N,R)はP(N,R)/P(R,R)で、この機能を実現するのは比較的に簡単なのは再帰アルゴリズムで、しかし再帰の性能を考慮して、以下は2種類の非再帰の方法を採用して、具体的なコードは以下の通りです
using System;
using System.Collections.Generic;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(P1(6, 3));
Console.WriteLine(P2(6, 3));
Console.WriteLine(C(6, 2));
}
///
///
///
///
///
///
static long P1(int N, int R)
{
if (R > N || R <= 0 || N <= 0 ) throw new ArgumentException("params invalid!");
long t = 1;
int i = N;
while (i!=N-R)
{
try
{
checked
{
t *= i;
}
}
catch
{
throw new OverflowException("overflow happens!");
}
--i;
}
return t;
}
///
///
///
///
///
///
static long P2(int N, int R)
{
if (R > N || R <= 0 || N <= 0 ) throw new ArgumentException("arguments invalid!");
Stack s = new Stack();
long iRlt = 1;
int t;
s.Push(N);
while ((t = s.Peek()) != N - R)
{
try
{
checked
{
iRlt *= t;
}
}
catch
{
throw new OverflowException("overflow happens!");
}
s.Pop();
s.Push(t - 1);
}
return iRlt;
}
///
///
///
///
///
///
static long C(int N, int R)
{
return P1(N, R) / P1(R, R);
}
}
}
本稿で述べたことが皆さんのC#プログラム設計に役立つことを願っています.