找出这个最小硬币贪婪算法的大O

时间:2019-06-27 01:48:08

标签: algorithm big-o

static void coin(int[] d, int amount) {
        int num_coin;
        for (int i = d.length - 1; i >= 0; i--) {
            num_coin = amount / d[i];
            System.out.println("You should give " + num_coin + " coins of denomination " + d[i]);
            amount = amount % d[i];
        }
    }

根据我发送此算法的内容,这是否会改变它的大O?意思是,如果我发送的总数为1的1,它将运行O(1)时间,对吗?如果我一共发送{1}到5,那是O(5)还是O(n)?

如果我发送{1,4,16,64}来寻找总数55,那O(n)还是吗? n是数组中的总数

1 个答案:

答案 0 :(得分:2)

算术运算(+,-,/,*)具有O(1)

您正在遍历int数组d,该数组会产生复杂的O(循环中的项)

假设n是int数组d中的项数,则该算法的最终Big O可以写为O( N + 1 + 1) = O(n)

要解决您的问题,您将不会基于数量的值来影响此算法的复杂性,重要的是循环运行的次数,在这种情况下,循环的次数是固定的(即,不是恒定的)