Introselect

Uses your system voice; voice and rate in settings.

Q17092644Snapshot

≈ 3 min read

Names in other languages

  • فارسیانتخاب درونگرا
  • EnglishIntroselect
  • 日本語イントロセレクト
  • 中文反省式选择
  • 中文反省式选择
  • 简体中文反省式选择
  • 繁體中文反省式選擇

Article bodies are English and are not machine-translated. A name in another language is not a translation of the article.

In computer science, introselect (short for "introspective selection") is a selection algorithm that is a hybrid of quickselect and median of medians which has fast average performance and optimal worst-case performance. Introselect is related to the introsort sorting algorithm: these are analogous refinements of the basic quickselect and quicksort algorithms, in that they both start with the quick algorithm, which has good average performance and low overhead, but fall back to an optimal worst-case algorithm (with higher overhead) if the quick algorithm does not progress rapidly enough. Both algorithms were introduced by David Musser in , with the purpose of providing generic algorithms for the C++ Standard Library that have both fast average performance and optimal worst-case performance, thus allowing the performance requirements to be tightened. However, in most C++ Standard Library implementations, a different "introselect" algorithm is used, which combines quickselect and heapselect, and has a worst-case running time of O(n log n). The C++ draft standard, as of 2022, does not have requirements on the worst-case performance, therefore allowing such choice.

In computer science, introselect (short for "introspective selection") is a selection algorithm that is a hybrid of quickselect and median of medians which has fast average performance and optimal worst-case performance. Introselect is related to the introsort sorting algorithm: these are analogous refinements of the basic quickselect and quicksort algorithms, in that they both start with the quick algorithm, which has good average performance and low overhead, but fall back to an optimal worst-case algorithm (with higher overhead) if the quick algorithm does not progress rapidly enough. Both algorithms were introduced by David Musser in , with the purpose of providing generic algorithms for the C++ Standard Library that have both fast average performance and optimal worst-case performance, thus allowing the performance requirements to be tightened. However, in most C++ Standard Library implementations, a different "introselect" algorithm is used, which combines quickselect and heapselect, and has a worst-case running time of O(n log n). The C++ draft standard, as of 2022, does not have requirements on the worst-case performance, therefore allowing such choice. Both approaches limit the recursion depth to k ⌈log n⌉ = O(log n) and the total running time to O(n). The paper suggested that more research on introselect was forthcoming, but the author retired in 2007 without having published any such further research.

See also

Floyd–Rivest algorithm

References

Text derived from https://en.wikipedia.org/w/index.php?oldid=1292766826 under CC BY-SA 4.0; modifications have been made.

Provenance

snapshot introselect-1855108-f1c44c6a19a7e8d1 · hash f1c44c6a19a7e8d17796d2450c708d5bd069681425d97f1e8d8c5a657f12b6ee · captured 1748448239.0 · version history

Cite this page as: encyclopegia.org, “Introselect”, snapshot introselect-1855108-f1c44c6a19a7e8d1. https://encyclopegia.org/a/introselect

Sources cited in this revision

Extracted from the cited revision's reference blocks; absent citations are not invented.