Mengapa Visual Studio 2015 bertukar dari bawah ke atas ke atas bawah isihan gabungan untuk std::list::sort()?

Linda Hamilton
Lepaskan: 2024-10-31 03:28:30
asal
673 orang telah melayarinya

Why did Visual Studio 2015 switch from bottom-up to top-down merge sort for std::list::sort()?

std::list::sort() - Mengapakah Bertukar Secara Tiba-tiba kepada Strategi Atas Bawah?

Dalam Visual Studio 2015, pelaksanaan std::list::sort() mengalami perubahan ketara daripada isihan cantuman bawah ke atas klasik kepada isihan cantuman atas-bawah. Anjakan ini memperkenalkan ketidakcekapan yang jelas dengan memerlukan titik tengah senarai ditemui untuk setiap tahap rekursi.

Sebab Perubahan:

Walau bagaimanapun, seperti yang didokumenkan dalam kemas kini yang disediakan, Microsoft membuat pengoptimuman untuk mengekalkan tiada peruntukan memori dan pembetulan keselamatan pengecualian yang mendorong perubahan awal untuk menggunakan iterator. Khususnya, pelaksanaan rekursif:

  • Menggunakan isihan gabungan yang cekap yang membahagikan senarai dengan 2 pada setiap peringkat rekursif, bukannya mengimbas senarai.
  • Berbalik kepada menggunakan penunjuk sebaliknya daripada iterator, berpotensi meningkatkan prestasi.
  • Melaksanakan logik splice untuk menambah baik penggabungan berbilang nod pada satu masa.

Perbandingan dengan Isih Gabungan Bawah Atas:

Walaupun telah dioptimumkan, pendekatan atas ke bawah masih berpotensi menjadi lebih perlahan daripada isihan gabungan bawah ke atas apabila berurusan dengan senarai terpaut yang besar dan berselerak disebabkan oleh kesilapan cache yang meningkat.

Pelaksanaan Alternatif:

Pelaksanaan alternatif disediakan yang mengekalkan pendekatan isihan cantum bawah ke atas sambil menggunakan iterator dan bukannya tatasusunan senarai. Pendekatan ini bertujuan untuk mengelakkan pencapaian prestasi yang sentiasa perlu mencari titik tengah senarai semasa rekursi.

Kesimpulan:

Suis kepada isihan gabungan atas ke bawah dalam Visual Studio 2015 tidak dibuat secara sesuka hati. Microsoft melaksanakan pengoptimuman untuk menangani potensi ketidakcekapan, sambil mengekalkan faedah keselamatan pengecualian dan mengurangkan peruntukan memori. Walau bagaimanapun, untuk senarai terpaut yang besar dan jarang penduduknya, pendekatan isihan cantum bawah ke atas mungkin masih memberikan prestasi yang lebih baik.

Atas ialah kandungan terperinci Mengapa Visual Studio 2015 bertukar dari bawah ke atas ke atas bawah isihan gabungan untuk std::list::sort()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!