如何确定以下程序的时间和空间复杂度?

时间:2018-06-20 10:36:43

标签: c# arrays data-structures

我只是在学习数据结构时写了一个关于数组旋转的代码。我需要知道如何通过测量时间和空间复杂度来改进程序。

数组旋转程序。 将阵列旋转2会形成阵列

1,2,3,4 输入

3,4,1,2 输出

  public class Program
    {

        public static void Main(string[] args)
        {
            int arrayCount = 0;
            int rotate = 2;
        int []answer = new int[4];

            for (int i = 0; i < answer.Length; i++)
            {
                answer[i] = Convert.ToInt32(Console.ReadLine());
            }
            arrayCount = answer.Count();
            ArrayRotation.displayRotatedArray(answer, rotate, arrayCount);
            ArrayRotation.printArray(answer, arrayCount);
            Console.ReadKey();
        }
    }

 public static class ArrayRotation
    {
        public static void displayRotatedArray(int []temp, int rotate, int count)
        {

           int c = rotate;
            int d = rotate;
            int[] firstOccurenceArray = new int[rotate];

                for (int g = 0; g < rotate; g++)
                {
                    int num = g;
                    firstOccurenceArray[g] = temp[g];
                }
                for (int i = 0; i < temp.Length - c; i++)
                {
                    temp[i] = temp[rotate];
                    rotate++;
                }
            for (int k = 1; k < d + 1; k++)
            {
                temp[count - k] = firstOccurenceArray[c - 1];
                c--;
            }
        }
        /* utility function to print an array */
       public static void printArray(int[] temp, int size)
        {
            for (int i = 0; i < size; i++)
                Console.Write( temp[i] + " ");
        }
    }

2 个答案:

答案 0 :(得分:0)

时间复杂度:O(n),其中n =数组的长度(因为没有嵌套的for循环)

空间复杂度:O(2),即O(1)(因为此数组的大小firstOccurenceArray为常数,即2)

答案 1 :(得分:0)

时间复杂度的计算方法:根据输入参数大小变化的多少因素来改变操作次数。

对于此示例,操作如前所述:

(2)+ 2 *旋转+ 2 *温度长度+ 2 *旋转

最大为2 +(6 *温度长度) 所以时间复杂度是O(n)。

空间复杂度:O(旋转),最大为O(n)

您可以通过就地交换(变戏法)数组值来优化O(n)时间复杂度和O(1)空间复杂度的问题。

REF: https://www.geeksforgeeks.org/array-rotation