У меня есть этот следующий фрагмент кода:Как избежать временной сложности O (n^2)?
for(ArticleBasketInBean basketBean : bean.getBasket()) {
for(ArticleDTO article : dto.getArticleList()) {
if(basketBean.getArticleReference().equals(article.getArticleReference())) {
article.setAddedToBasket(true);
}
}
}
Очевидно, что временная сложность указанной выше операции является O (N^2). Для этого случая articleReference
уникален. Таким образом, список, возвращаемый bean.getBasket()
, не имеет дубликата articleReference
, также это верно для списка, возвращаемого dto.getArticleList()
.
Я хочу избежать этой вложенной итерации и хочу написать более быстрый код. Как я могу это сделать?
Вам понадобится какая-то структура индекса, например HashMap. Но действительно ли вложенная петля проблема? Сколько статей мы говорим? – Thilo
Простой трюк для сокращения итераций: 'break' из внутреннего цикла после первого совпадения. Тем не менее O (n^2). – Thilo
Вы можете немного улучшить это, но в худшем случае всегда будет O (n^2). – Maroun