如何以良好的时间复杂度遍历嵌套的 JSON 对象?

问题描述

我有一个 JSON 对象,它有可能像这样嵌套多次:

{
"type": "cars","nested1": {
    "nested2": {
        "name": "tesla","nested3": {
            "name": "audi","make": "q7","nested4": {}
                   }
               }
           }
}

我希望能够遍历每个字段,检查它是否包含一个对象作为其值,然后如果是这种情况,进入这个嵌套内部,并检查包含一个对象作为其值的字段等等。 ..

我尝试过简单的方法,但时间复杂度变得非常糟糕。对于 3 个嵌套对象,其 O(n^3),因为您必须遍历每个嵌套对象中的每个字段。

有什么数据结构可以给我更好的时间复杂度吗?

解决方法

除非使用了一些其他信息,否则扫描将是 O(Nₚ),其中 Nₚ 是属性的数量。

在你的例子中,顶层对象有2个属性,下一级1,下一级2,第三级3,最后一级0。你需要访问8个属性,2+1+2+3+ 0. 尽管 8 恰好是 2³,但这并不会使算法 O(N³) 对任何有用的 N 产生影响,因为如果您的示例具有不同数量的属性或多于或少于三个级别的填充对象,那么这种关系就会中断。选择代表问题的 N 是正常的。如果您将 JSON 序列化为没有多余空格的文件,则查找空对象将成为对 '{}' 的子字符串搜索,对于子字符串搜索,您将不会改进 O(N)。

改进算法的唯一方法是使用一些额外的信息来避免访问每个属性;例如,如果您知道空对象仅出现在第四层,那么您就不需要查看该层或更深层次的对象中的属性。