有没有办法加速2嵌套循环的算法?

时间:2017-03-08 15:07:27

标签: java jsp spring-mvc javabeans

我有一个不幸的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>

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

2 个答案:

答案 0 :(得分:3)

我同意@duffymo,有一些简单的情况,当你无法降低算法的复杂性时(尤其是将输出打印到屏幕时)。您需要打印出所有信息,在算法复杂性方面没有太多优化空间。

如果你不得不重复打印一些东西,比如一本特定的书一千次,那么你就可以进行最优化 - 你可以简单地通过连接“预先计算”作者到一个字符串并使用该字符串。这将导致而不是迭代所有例如作者每次请求书籍信息时,只需要准备好字符串并将其打印出来。因此,对于1000个请求,您只需执行一个循环。

答案 1 :(得分:1)

直观地说,类别可能比书本少得多,而且描述和作者也少得多,因此最大的数据结构就是书籍。 O(n ^ 3)情况并不是很多,因为要考虑多个较小的结构,所以我认为现在不需要太多优化。