长码的空间复杂度(辅助)

时间:2016-10-30 04:04:48

标签: algorithm hashmap switch-statement space-complexity

每当我们计算额外空间时,我们不会将输入视为计算的一部分。让我们说我们需要一个算法来打印一个数字到等同于1的数字为“One”,2为“Two”等。

这样做的一种方法是将每个数字映射到等效的单词。

Map<Integer, String> map = new HashMap<>();
map.put(1, "One");
.....
map.put(Integer.MAX_VALUE, "Something equivalent");

然后有一个函数来返回单词。这将考虑具有O(N)额外的存储空间。

我的问题是如果我们这样编写一个函数

public printDigit(int n) {
     switch(n) {
        case 1:
          return "One";
        ...
        case Integer.MAX_VALUE:
          return "Something equivalent";
     }
}

通常,我们不考虑使用代码空间来增加空间吗?我不习惯那种逻辑,因为我以前从未遇到过它。因此,我们将此算法称为O(1)额外空间,因为我们没有额外的数据结构来存储;

1 个答案:

答案 0 :(得分:0)

如果编译器决定将switch-cases存储在跳转表中,则空间复杂度不再是O(1),因为实现类似于C ++中的映射或Java中的hashmap。相反,它将是O(N)

编译器可用的其他选项是对提供的案例进行线性搜索或二进制搜索。在所有这些选项中,必须将每个交换机箱存储在某种形式的容器中。在所有这些情况下,空间复杂度将再次为O(N)

最重要的是,为了便于阅读,switch-statementif-else更受欢迎。但是,在代码中使用map可以提供简洁性和更好的可维护性。