我有一个不幸的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个请求,您只需一个周期。
直觉上,类别可能比书籍要少得多,而且描述和作者少得多,因此最大的数据结构就是书籍。由于有多个较小的结构要考虑,因此并不是真正的O(n^3)情况,因此我认为到目前为止不需要太多优化。