每当我们计算额外空间时,我们不会将输入视为计算的一部分。让我们说我们需要一个算法来打印一个数字到等同于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)额外空间,因为我们没有额外的数据结构来存储;
答案 0 :(得分:0)
如果编译器决定将switch-cases存储在跳转表中,则空间复杂度不再是O(1)
,因为实现类似于C ++中的映射或Java中的hashmap。相反,它将是O(N)
。
编译器可用的其他选项是对提供的案例进行线性搜索或二进制搜索。在所有这些选项中,必须将每个交换机箱存储在某种形式的容器中。在所有这些情况下,空间复杂度将再次为O(N)
。
最重要的是,为了便于阅读,switch-statement
比if-else
更受欢迎。但是,在代码中使用map
可以提供简洁性和更好的可维护性。