当前位置: 首页 > 知识库问答 >
问题:

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

葛桐
2023-03-14

我有一个JSON对象,它有可能被嵌套几次,如下所示:

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

我希望能够遍历每个字段,检查它是否包含一个对象作为它的值,然后如果是这样的话,进入这个嵌套字段,检查是否包含一个对象作为它的值,等等...

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

有没有什么数据结构可以给我一个更好的时间复杂性?

共有1个答案

孔乐邦
2023-03-14

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

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

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

 类似资料:
  • 问题内容: 我目前有这个: test.json看起来像这样: 我越来越: 如何更改它,以便无论我拥有多少嵌套值,它都将循环遍历所有嵌套项目? 所以对于上面的例子,我会得到 问题答案: 您可以创建一个递归循环函数,但是会遇到一个问题:当属性是对象时,因为没有字符串,所以没有文本可显示。因此,您将得到: 因为while 是为项目#2显示的字符串,所以它是为项目#1显示的对象。 无论如何,这就是我组成的

  • 我很难理解算法分析,尤其是下面的例子: 所以我的理解是,外循环是,当我乘以一个常量时,我不确定是否有任何区别。 不过,最让我困惑的是内部循环。我认为它是,因为j被常数递减,但我不确定和

  • 问题内容: 我必须遍历json数组对象。 它具有以下结构。 基本上我在做的是prod_1是产品的名称,并且prod_1的版本列表已填充在其中。 所以现在我想要的是产品的名称以及它的版本。 问题在于可能有很多产品和该产品下的许多版本。所以我需要可以在 javascript 中使用适当的循环结构来对其进行处理。 最好将循环将产品名称存储在一个变量中,将版本存储在另一个变量中,因为我需要对产品名称进行一

  • 我在计算时间复杂度时遇到困难,尤其是while循环: 示例1: 时间复杂度是O(n x 3 x r)还是O(3)? 示例 2: 时间复杂度会是O(3 x n)还是O(3)?

  • 我的困惑是- 如果我把n+(n^2-1)*O(1)写成n+O(1)+O(1)+........+O(1),那么我可以忽略低阶项,复杂性将是O(n),但是另一个推理可以是一个常数的工作量正在做n^2次,所以时间复杂性应该是O(n^2) 在这个问题中也发生了类似的事情-带有if语句的嵌套循环的时间复杂度O(N):O(N^4)?

  • 以下示例循环的时间复杂度为O(n^2),有人能解释为什么是O(n^2)吗?因为这取决于c的价值。。。 循环1--- 回路2--- 如果c=0;然后它运行无限次,就像增加c值一样,内部循环的运行次数也会减少 有人能给我解释一下吗?