有什么方法可以使用 2 个嵌套循环来加速算法?

Any way to speed up algorithm with 2 nested loops?

我有一个不幸的 O(n^3) 情况,我可以使用一些建议。在英语中,情况是:打印每个类别名称,然后针对每个类别,获取与该类别相关的每一本书。然后,对于每本书,获取与该书相关的所有作者和描述。

<c:forEach items="${categories}" var="category">
    <h2>${category.name}</h2>
        <c:forEach items="${category.books}" var="book">
            <h3>${book.title}</h3>
                <c:forEach items="${book.authors}" var="author">
                    <h4>${author.name}</h4>
                </c:forEach>
                <c:forEach items="${book.descriptions}" var="description">
                    <p>${description.description}</p>
                </c:forEach>
        </c:forEach>
</c:forEach>

似乎要按类别获取所有书籍,然后按书籍获取所有作者和描述,这是唯一的方法...但这不可能是正确的。我是算法的新手并且加快了速度,所以我会接受你提供的任何建议。谢谢!

我同意@duffymo,在某些情况下,您无法降低算法的复杂性(尤其是在将输出打印到屏幕时)。需要打印所有信息,算法复杂度优化空间不大

如果您必须重复打印某些内容,比如一本书打印 1000 次,那么您可以进行优化 - 例如,您可以简单地将 "precalculate" 作者通过连接变成一个字符串并使用该字符串.这将导致而不是迭代所有例如作者每次请求书籍信息时,只需获取准备好的字符串并将其打印出来。因此,对于 1000 个请求,您将只执行一个周期。

直觉上,类别可能比书籍少得多,描述和作者也少得多,因此最大的数据结构将是书籍。这实际上不是 O(n^3) 的情况,因为要考虑多个更小的结构,所以我认为到目前为止不需要太多优化。