Как изобразить сложность Big O (n!) Time из цикла for? - PullRequest
0 голосов
/ 05 февраля 2012

Например

О (п)

for (int i=0;i<n;i++)

После редактирования: мой окончательный ответ -

for(int i =(n - 1); i > 1; i--)
 {
         factorial = factorial * i;             
 }  
 for (int j=n-2;j<factorial;j++)
 {

 }

Ответы [ 4 ]

2 голосов
/ 05 февраля 2012

Самый простой ответ для (int i = 0; i

На практике обычно O (n!) Алгоритмы - это те, которые работают, пробуя все различные перестановки списка, то есть все различные способы, которыми вы можете переупорядочить список. Одним из примеров является поиск самой короткой линии, проходящей через все точки на карте, которая называется проблемой коммивояжера. Вам нужно попробовать все различные способы, чтобы пройти все пункты, и это будет O (n!).

IEnumerable<List<int>> nextPermutation(List<int> nodesLeft)
{
    if (nodesLeft.Count == 0)
    {
        yield return new List<int>();
    }
    else
    {
        for (int i = 0; i < nodesLeft.Count; i++)
        {
            List<int> newNodesLeft = new List<int>(nodesLeft);
            newNodesLeft.removeAt(i);

            foreach (List<int> subPermutation in nextPermutation(newNodesLeft)
            {
                subPermutation.add(nodesLeft[i]);
                yield return subPermutation;
            }
        }
    }
}

void main()
{
    foreach (List<int> permutation in nextPermutation(new List<int>(new int[]{1,2,3,4,5}))) {
        //every permutation of [1,2,3,4,5] will be generated here
        //this will take O(n!) to complete, where n is the number of nodes given (5 in this case)
    }
}
1 голос
/ 05 февраля 2012

Если рекурсия разрешена, то:

void loop(int n)
{
    if(n == 1) 
        return; // the program gets here exactly n! times

    for(int i=0; i<n; i++)
        loop(n-1);
}
0 голосов
/ 05 февраля 2012

Если бы мы были на одной странице здесь ... Я думаю, это выглядело бы как ...
Tau(fetch) + Tau(store) + (2Tau(fetch) + Tau(<) )*(N + 1) + (2Tau(fetch) + Tau(+) + Tau(store)) * N

0 голосов
/ 05 февраля 2012
fact = 1;
for( c = 1 ; c <= n ; c++ )
{
    fact = fact*c;
}

как это?

...