Javascript 不确定示例中地图对象使用的空间复杂度是多少?

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

我正在学习分析空间复杂性,但我对分析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
例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;i 现在让我们将实现改为映射。在这里,当字符串中遇到新字符时,映射的大小会增加

从理论上讲,空间复杂度为O(n)

但实际上,我们从长度为0(0个关键点)的贴图开始,它不会超过26。如果字符串不包含所有字符,则所占用的空间将比前面实现中的数组小得多

function 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;i 函数getCharacterCount(s){ 常量数组=新的Int8Array(26); for(设i=0;ilog(getCharacterCountMap(“abcdefabcdef”)“复杂性”不是一个值,而是一个函数。如果
N
是我们处理的数据量,“复杂性”告诉我们随着
N
的增加,空间/时间的使用将如何增长。如果它一点也不改变,那么复杂性就是常数,如果它以与N相同的速度增长,那么它是线性的,等等。因为在你的例子中N没有变化,所以谈论它们的复杂性是没有意义的。@georg,你能澄清你的评论吗。。。b/c ex1中表[]中的N。不会更改,但是ex2中的映射{}中的N会随着添加新项时映射{}的大小而更改。您的示例不接受输入,没有更改的数据。因此,我们不能说他们的复杂性。