Javascript 不确定示例中地图对象使用的空间复杂度是多少?
我正在学习分析空间复杂性,但我对分析JS中的数组和对象感到困惑。所以我想在这里得到一些帮助 例1。数组[]Javascript 不确定示例中地图对象使用的空间复杂度是多少?,javascript,arrays,object,Javascript,Arrays,Object,我正在学习分析空间复杂性,但我对分析JS中的数组和对象感到困惑。所以我想在这里得到一些帮助 例1。数组[] int[] table = new int[26]; for (int i = 0; i < s.length(); i++) { table[s.charAt(i) - 'a']++; } int[]表=新的int[26]; 对于(int i=0;i
int[] table = new int[26];
for (int i = 0; i < s.length(); i++) {
table[s.charAt(i) - 'a']++;
}
int[]表=新的int[26];
对于(int i=0;i
例1。来自一个在线示例,它表示空间复杂度为O(1),因为表的大小保持不变
例2。对象{}
let nums[0,1,2,3,4,5], map = {};
for (let i = 0; i < nums.length; i++) {
map[ nums[i] ] = i;
}
let nums[0,1,2,3,4,5],map={};
for(设i=0;i
我想是ex2。使用O(n),因为映射对象被访问了6次。但是,如果我使用从ex1学到的概念,那么空间复杂度应该是O(1)?知道我哪里出错了吗 从复杂性分析的角度来看,在ex1中,复杂性为O(1),因为数组大小没有增加。因为您正在将表初始化为26的固定大小(看起来像是在计算字符串中的字符?) 请参见下面的示例,该示例跟踪字符串中字母的计数(为清晰起见,仅使用小写字母)。在这种情况下,即使字符串的长度发生变化,跟踪字母计数的数组长度也不会改变
function getCharacterCount(s){
const array = new Int8Array(26);
for (let i = 0; i < s.length; i++) {
array[s.charCodeAt(i) - 97]++;
}
return array;
}
函数getCharacterCount(s){
常量数组=新的Int8Array(26);
for(设i=0;ifunction getCharacterCountMap(s){
const map = {};
for (let i = 0; i < s.length; i++) {
const charCode = s.charCodeAt(i) - 97;
if(map[charCode]){
map[charCode] = map[charCode] + 1
}else{
map[charCode] = 0;
}
}
return map;
}
函数getCharacterCountMap(s){
常量映射={};
for(设i=0;iN
是我们处理的数据量,“复杂性”告诉我们随着N
的增加,空间/时间的使用将如何增长。如果它一点也不改变,那么复杂性就是常数,如果它以与N相同的速度增长,那么它是线性的,等等。因为在你的例子中N没有变化,所以谈论它们的复杂性是没有意义的。@georg,你能澄清你的评论吗。。。b/c ex1中表[]中的N。不会更改,但是ex2中的映射{}中的N会随着添加新项时映射{}的大小而更改。您的示例不接受输入,没有更改的数据。因此,我们不能说他们的复杂性。