web-dev-qa-db-ja.com

2 ^ n複雑さのアルゴリズム

2 ^ nの複雑さのアルゴリズムを実装してテストする必要があります。私はしばらくの間それを見つけようとしていました。実装によってこれを達成できる方法があれば、2 ^ nの正確な複雑さが最適です。誰かが場所を知っているなら、私は例を見つけることができます、または私がそれを実装するのを手伝うことができれば、それは素晴らしいでしょう:-)。基本的な操作は何でもかまいませんが、i ++のような単一のステートメントです。最高だろう。

13
rubixibuc

N個の要素を持つセットのすべてのサブセットを生成します。

追加されました。 S = {a0、a1、...、an-1}のすべてのサブセットを生成する最も簡単な方法は、おそらくランクのバイナリ表現とサブセットの間で変換することです。

S = {a0、a1、a2}を取ります。

rank binary subset
0    000    {} 
1    001    {a0}
2    010    {a1}
3    011    {a0, a1}
4    100    {a2}
5    101    {a0, a2}
6    110    {a1, a2}
7    111    {a0, a1, a2}

したがって、バイナリの1は、対応する要素がサブセットにあることを意味します。 0は、要素がサブセットに含まれていないことを意味します。

ただし、グレイコードも検索する必要があります。

25
user515430

古典的な再帰的フィボナッチ数の計算はO(2 ^ n)です。

unsigned Fib(unsigned n)
{
    if (n <= 1)
        return n;
    else
        return Fib(n - 1) + Fib(n - 2);
}

上記は実際にはtheta(Phi ^ n)であるため、2 ^ nを返すtheta(2 ^ n)アルゴリズムを追加します。ジェレマイア・ウィルコックに感謝します。

unsigned TwoExp(unsigned n)
{
    if (n == 0)
        return 1;
    else
        return TwoExp(n - 1) + TwoExp(n - 1);
}
8
ThomasMcLeod

Quantum Bogosort スペースの複雑さは2 ^ nです。

4
wilhelmtell

私は問題を再考することに多くの時間を費やし、私が思いついた解決策を投稿したいと思います。すべての回答が、この解決策を思いつく能力に貢献し、回答してくれたすべての人に非常に感謝しています。 :-)私はアルゴリズムが実質的に何もしないことを理解しています。

javaで書かれています
タブを機能させることができないようです
基本的な操作はi ++です。

public class TwoToTheN
{  
     private static int twoToTheN = 0;  
     private static int power = 3;

     public static void main(String[] args)   
     {  
         twoToTheN(power);  
         System.out.println(twoToTheN);  
     }  

     private static void twoToTheN(int n)  
     {  
         if(n == 0)   
         {  
             twoToTheN++;  
             return;  
         } 
         else if(n == 1)  
         {  
             twoToTheN++;  
             twoToTheN++;  
             return;  
         }  
         twoToTheN(n-1);  
         twoToTheN(n-1);  
     }
}  
2
rubixibuc

これが1つです:2 ^(2 ^ n)の桁を出力します。

1
wnoise