Quelle est la complexité de ce simple morceau de code?

Je suis coller ce texte à partir d'un ebook que j'ai. Il est dit de la complexité si O(n2) et donne aussi une explication pour cela, mais je ne vois pas comment.

Question: qu'est-Ce que le temps d'exécution de ce code?

public String makeSentence(String[] words) {
    StringBuffer sentence = new StringBuffer();
    for (String w : words) sentence.append(w);
    return sentence.toString();
}

La réponse que le livre a donné:

O(n2), où n est le nombre de lettres dans la phrase. Voici pourquoi: chaque fois que vous
ajouter une chaîne à la peine, vous créez une copie de la sentence et courir à travers toutes les lettres dans
peine de les copier sur Si vous devez parcourir jusqu'à n caractères à chaque fois dans l'
boucle, et vous êtes en boucle au moins n fois, ce qui vous donne un O(n2) temps d'exécution. Ouch!

Quelqu'un peut-il expliquer cette réponse plus clairement?

  • Khan: Ce n'est pas son/sa réponse. C'est la réponse dans le livre qui est en cours de lecture, qui est ce qui est remis en question.
  • StringBuffer a une mémoire tampon interne qui obtient doublé dès qu'il déborde. Que vraiment signifie que la copie de la "phrase" ne se produit pas, chaque fois que vous ajouter quelque chose à cela. Il ne va se passer si les dépassements de tampon.
  • Si vous êtes préoccupé par la performance, utiliser StringBuilder "à partir de la version du JDK 5, cette classe a été complétée par une classe équivalente conçu pour une utilisation par un seul thread, StringBuilder. La classe StringBuilder doit généralement être utilisé de préférence à celui-ci, car il prend en charge tous les mêmes opérations, mais il est plus rapide, car il n'effectue aucune synchronisation. "
InformationsquelleAutor Someone | 2011-08-23