"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que `std::list::sort()` mudou para uma classificação de mesclagem de cima para baixo no Visual Studio 2015?

Por que `std::list::sort()` mudou para uma classificação de mesclagem de cima para baixo no Visual Studio 2015?

Publicado em 2024-11-09
Navegar:250

 Why Did `std::list::sort()` Switch to a Top-Down Merge Sort in Visual Studio 2015?

Por que a mudança repentina para a estratégia de cima para baixo em std::list::sort()?

No Visual Studio 2015 (VS2015), a Microsoft mudou a estratégia de classificação de std::list::sort() do tradicional Merge Sort de baixo para cima para uma abordagem de cima para baixo. Essa mudança eliminou o uso de uma matriz interna de listas e adotou iteradores para rastrear limites de execução classificados dentro da lista original.

Razões para a mudança

Stephan T. Lavavej , o desenvolvedor da abordagem top-down, citou a necessidade de evitar a alocação de memória e a construção de alocadores não padrão. O VS2015 introduziu alocadores que não eram mais construtíveis e com estado padrão, o que apresentava problemas ao usar a abordagem ascendente anterior. A abordagem -down utiliza um algoritmo recursivo que divide recursivamente a lista em metades até atingir casos base onde as listas estão vazias ou contêm um único elemento. A função _Sort particiona a lista em três segmentos: execução à esquerda, execução à direita e o iterador final. A lógica de mesclagem é executada usando std::list::splice para mover nós dentro da lista original, mantendo a segurança da exceção.

Considerações de desempenho

Enquanto a lógica de cima para baixo abordagem aborda as questões de alocação de memória, ela vem com uma penalidade de desempenho em comparação com o Merge Sort original de baixo para cima. Para listas grandes com nós dispersos, a abordagem top-down sofre com aumento de perdas de cache, resultando em tempos de execução mais lentos. Nesses casos, pode ser mais rápido mover a lista para uma matriz ou vetor, classificá-la e criar uma nova lista a partir da matriz ou vetor classificado.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3