Search code examples
javascriptfor-loopobjectnestedtime-complexity

Time complexity of traversing nested JS object


I would like to know in which time complexity I am traversing my nested JS Object. For traversing the JS Object I am using three nested for-loops e.g.

Sketch of the For-Loop:

for(const page in object){
  for(const group in page){
    for(element in elements){
       }
      }
    }

I need to visit every element of each elements for each group a page has.

JS Object:

{
"Page 1":{
    "Group 1": {
        "Elements": [
            "Element 1",
        ]
    },
    "Group 2": {
        "Elements": [
            "Element 1"
        ]
    }
},
"Page 2":{
    "Group 1": {
        "Elements": [
            "Element 1",
            "Element 2"
        ]
    }
}

}

Is it O(n) due to the fact that I am visiting each elements only a single time?


Solution

  • The complexity is O(P+G+E) where

    • P stands for the number of pages
    • G stands for the total number of groups
    • E stands for the total number of elements.

    In practice this is equivalent to O(E), but if you would have empty pages and/or empty groups (so without elements), then either P or G could be greater than E, and then it is important to speak of O(P+G+E).

    If however it is guaranteed that every page has at least one group, and every group has at least one element, then E is the greatest among (P, G, E), and so O(P+G+E) = O(E).