I gave this talk at the European Symposium on Algorithms 2012 in Ljubljana (Slowenia).
The corresponding paper won the best paper award.
Find my other talks and all corresponding papers on my web page:
http://wwwagak.cs.uni-kl.de/sebastian-wild.html
Engineering Java 7's Dual Pivot Quicksort Using MaLiJAnSebastian Wild
I gave this talk at the 2013 Meeting On Algorithm Engineering and Experiments (ALENEX) meeting.
Find my other talks and the corresponding papers on my web page:
http://wwwagak.cs.uni-kl.de/sebastian-wild.html
This document describes a testing framework for analyzing Java garbage collection (GC) performance. It consists of:
1. A properties file that specifies test parameters like the GC algorithm, heap size, and object lifetimes.
2. A script file that defines the sequence of object creations and workload.
3. Classes that execute the script, measure GC performance, and write output to log files.
4. A script that iterates the tests, varying a property each time and analyzing the results.
Bucardo is a replication system for PostgreSQL. It supports both master-slave (to multiple slaves) and master-master replication, and does not require any modifications to PostgreSQL to run. Maintained by Greg Sabino Mullane, its management application (bucardo_ctl) has recently been significantly improved, making initial setup of replication very fast and easy.
The document describes dual-pivot quicksort, which uses two pivot elements rather than one. It summarizes previous research that found dual-pivot quicksort often improves upon classic quicksort by reducing the number of element comparisons and cache misses, though it increases the number of swaps. The document then focuses on Yaroslavskiy's dual-pivot partitioning algorithm, which efficiently arranges elements into three groups - less than the first pivot, between the pivots, and greater than the second pivot - through in-place swapping.
These are the slides of my talk at the Meeting on Analytic Algorithmics and Combinatorics 2015 (ANALCO15) on branch mispredictions in classic Quicksort and Yaroslavskiy's dual-pivot Quicksort used in Java 7.
The talk is based on joint work with Conrado Martínez and Markus E. Nebel.
Find more information and the corresponding paper on my website: http://wwwagak.cs.uni-kl.de/sebastian-wild.html
Quickselect Under Yaroslavskiy's Dual Pivoting AlgorithmSebastian Wild
I gave this talk at the 24th International Meeting on Probabilistic, Combinatorial and Asymptotic Methods for the Analysis of Algorithms (AofA 2013) on Menorca (Spain).
A paper covering the analyses of this talk (and some more!) has been submitted.
Also, in the talk, I refer to the previous speaker at the conference, my advisor Markus Nebel - corresponding results can be found in an earlier talk of mine:
slideshare.net/sebawild/average-case-analysis-of-java-7s-dual-pivot-quicksort
Check my website for preprints of papers and my other talks:
wwwagak.cs.uni-kl.de/sebastian-wild.html
Engineering Java 7's Dual Pivot Quicksort Using MaLiJAnSebastian Wild
I gave this talk at the 2013 Meeting On Algorithm Engineering and Experiments (ALENEX) meeting.
Find my other talks and the corresponding papers on my web page:
http://wwwagak.cs.uni-kl.de/sebastian-wild.html
This document describes a testing framework for analyzing Java garbage collection (GC) performance. It consists of:
1. A properties file that specifies test parameters like the GC algorithm, heap size, and object lifetimes.
2. A script file that defines the sequence of object creations and workload.
3. Classes that execute the script, measure GC performance, and write output to log files.
4. A script that iterates the tests, varying a property each time and analyzing the results.
Bucardo is a replication system for PostgreSQL. It supports both master-slave (to multiple slaves) and master-master replication, and does not require any modifications to PostgreSQL to run. Maintained by Greg Sabino Mullane, its management application (bucardo_ctl) has recently been significantly improved, making initial setup of replication very fast and easy.
The document describes dual-pivot quicksort, which uses two pivot elements rather than one. It summarizes previous research that found dual-pivot quicksort often improves upon classic quicksort by reducing the number of element comparisons and cache misses, though it increases the number of swaps. The document then focuses on Yaroslavskiy's dual-pivot partitioning algorithm, which efficiently arranges elements into three groups - less than the first pivot, between the pivots, and greater than the second pivot - through in-place swapping.
These are the slides of my talk at the Meeting on Analytic Algorithmics and Combinatorics 2015 (ANALCO15) on branch mispredictions in classic Quicksort and Yaroslavskiy's dual-pivot Quicksort used in Java 7.
The talk is based on joint work with Conrado Martínez and Markus E. Nebel.
Find more information and the corresponding paper on my website: http://wwwagak.cs.uni-kl.de/sebastian-wild.html
Quickselect Under Yaroslavskiy's Dual Pivoting AlgorithmSebastian Wild
I gave this talk at the 24th International Meeting on Probabilistic, Combinatorial and Asymptotic Methods for the Analysis of Algorithms (AofA 2013) on Menorca (Spain).
A paper covering the analyses of this talk (and some more!) has been submitted.
Also, in the talk, I refer to the previous speaker at the conference, my advisor Markus Nebel - corresponding results can be found in an earlier talk of mine:
slideshare.net/sebawild/average-case-analysis-of-java-7s-dual-pivot-quicksort
Check my website for preprints of papers and my other talks:
wwwagak.cs.uni-kl.de/sebastian-wild.html
Succint Data Structures for Range Minimum ProblemsSebastian Wild
This was an invited talk I gave at Purdue University. It introduces some concepts and techniques of succinct data structures along the example of the range-minimum query problem, and presents my new, average-case space optimal solution.
Entropy Trees & Range-Minimum Queries in Optimal Average-Case SpaceSebastian Wild
I gave this talk at the Dagstuhl Seminar 19051
on Data Structures for the Cloud and External Memory Data
(https://www.dagstuhl.de/en/program/calendar/semhp/?semnr=19051)
Sesquickselect: One and a half pivot for cache efficient selectionSebastian Wild
These are the slides for my ANALCO about sesquickselect, a novel quickselect variant. The paper and further details here: https://www.wild-inter.net/publications/martinez-nebel-wild-2019
Average cost of QuickXsort with pivot samplingSebastian Wild
The document discusses QuickXsort, a variant of Quicksort that uses a sorting algorithm X to sort one subproblem during recursion. QuickXsort is described as using Mergesort for X to achieve near-optimal comparison counts while sorting in-place. Merging in Mergesort is explained as possible through swapping elements between runs and a buffer to merge runs together without using extra space.
Nearly-optimal mergesort: Fast, practical sorting methods that optimally adap...Sebastian Wild
Mergesort can make use of existing order in the input by picking up existing runs, i.e., sorted segments. Since the lengths of these runs can be arbitrary, simply merging them as they arrive can be wasteful—merging can degenerate to inserting a single elements into long run.
In this talk, I show that we can find an optimal merging order (up to lower order terms of costs) with negligible overhead and thereby get the same worst-case guarantee as for standard mergesort (up to lower order terms), while exploiting existing runs if present. I present two new mergesort variants, peeksort and powersort, that are simple, stable, optimally adaptive and fast in practice (never slower than standard mergesort and Timsort, but significantly faster on certain inputs).
This talk was given at ESA 2018 and is based on joint work with Ian Munro. ItThe paper and further information can be found on my website:
https://www.wild-inter.net/publications/munro-wild-2018
The document describes the process of quicksort and building a binary search tree on the same data. It shows quicksort sorting an array from 7 4 2 9 1 3 8 5 6 to its sorted order, and building a corresponding binary search tree from the sorted array. It notes that the recursion tree of quicksort is equivalent to the built binary search tree, and that the number of comparisons in quicksort equals building and searching the tree. It questions how median-of-three quicksort and other variants relate to building fringe-balanced search trees.
Webinar: Designing a schema for a Data WarehouseFederico Razzoli
Are you new to data warehouses (DWH)? Do you need to check whether your data warehouse follows the best practices for a good design? In both cases, this webinar is for you.
A data warehouse is a central relational database that contains all measurements about a business or an organisation. This data comes from a variety of heterogeneous data sources, which includes databases of any type that back the applications used by the company, data files exported by some applications, or APIs provided by internal or external services.
But designing a data warehouse correctly is a hard task, which requires gathering information about the business processes that need to be analysed in the first place. These processes must be translated into so-called star schemas, which means, denormalised databases where each table represents a dimension or facts.
We will discuss these topics:
- How to gather information about a business;
- Understanding dictionaries and how to identify business entities;
- Dimensions and facts;
- Setting a table granularity;
- Types of facts;
- Types of dimensions;
- Snowflakes and how to avoid them;
- Expanding existing dimensions and facts.
Ivanti’s Patch Tuesday breakdown goes beyond patching your applications and brings you the intelligence and guidance needed to prioritize where to focus your attention first. Catch early analysis on our Ivanti blog, then join industry expert Chris Goettl for the Patch Tuesday Webinar Event. There we’ll do a deep dive into each of the bulletins and give guidance on the risks associated with the newly-identified vulnerabilities.
GraphRAG for Life Science to increase LLM accuracyTomaz Bratanic
GraphRAG for life science domain, where you retriever information from biomedical knowledge graphs using LLMs to increase the accuracy and performance of generated answers
HCL Notes and Domino License Cost Reduction in the World of DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-and-domino-license-cost-reduction-in-the-world-of-dlau/
The introduction of DLAU and the CCB & CCX licensing model caused quite a stir in the HCL community. As a Notes and Domino customer, you may have faced challenges with unexpected user counts and license costs. You probably have questions on how this new licensing approach works and how to benefit from it. Most importantly, you likely have budget constraints and want to save money where possible. Don’t worry, we can help with all of this!
We’ll show you how to fix common misconfigurations that cause higher-than-expected user counts, and how to identify accounts which you can deactivate to save money. There are also frequent patterns that can cause unnecessary cost, like using a person document instead of a mail-in for shared mailboxes. We’ll provide examples and solutions for those as well. And naturally we’ll explain the new licensing model.
Join HCL Ambassador Marc Thomas in this webinar with a special guest appearance from Franz Walder. It will give you the tools and know-how to stay on top of what is going on with Domino licensing. You will be able lower your cost through an optimized configuration and keep it low going forward.
These topics will be covered
- Reducing license cost by finding and fixing misconfigurations and superfluous accounts
- How do CCB and CCX licenses really work?
- Understanding the DLAU tool and how to best utilize it
- Tips for common problem areas, like team mailboxes, functional/test users, etc
- Practical examples and best practices to implement right away
Main news related to the CCS TSI 2023 (2023/1695)Jakub Marek
An English 🇬🇧 translation of a presentation to the speech I gave about the main changes brought by CCS TSI 2023 at the biggest Czech conference on Communications and signalling systems on Railways, which was held in Clarion Hotel Olomouc from 7th to 9th November 2023 (konferenceszt.cz). Attended by around 500 participants and 200 on-line followers.
The original Czech 🇨🇿 version of the presentation can be found here: https://www.slideshare.net/slideshow/hlavni-novinky-souvisejici-s-ccs-tsi-2023-2023-1695/269688092 .
The videorecording (in Czech) from the presentation is available here: https://youtu.be/WzjJWm4IyPk?si=SImb06tuXGb30BEH .
Digital Marketing Trends in 2024 | Guide for Staying AheadWask
https://www.wask.co/ebooks/digital-marketing-trends-in-2024
Feeling lost in the digital marketing whirlwind of 2024? Technology is changing, consumer habits are evolving, and staying ahead of the curve feels like a never-ending pursuit. This e-book is your compass. Dive into actionable insights to handle the complexities of modern marketing. From hyper-personalization to the power of user-generated content, learn how to build long-term relationships with your audience and unlock the secrets to success in the ever-shifting digital landscape.
5th LF Energy Power Grid Model Meet-up SlidesDanBrown980551
5th Power Grid Model Meet-up
It is with great pleasure that we extend to you an invitation to the 5th Power Grid Model Meet-up, scheduled for 6th June 2024. This event will adopt a hybrid format, allowing participants to join us either through an online Mircosoft Teams session or in person at TU/e located at Den Dolech 2, Eindhoven, Netherlands. The meet-up will be hosted by Eindhoven University of Technology (TU/e), a research university specializing in engineering science & technology.
Power Grid Model
The global energy transition is placing new and unprecedented demands on Distribution System Operators (DSOs). Alongside upgrades to grid capacity, processes such as digitization, capacity optimization, and congestion management are becoming vital for delivering reliable services.
Power Grid Model is an open source project from Linux Foundation Energy and provides a calculation engine that is increasingly essential for DSOs. It offers a standards-based foundation enabling real-time power systems analysis, simulations of electrical power grids, and sophisticated what-if analysis. In addition, it enables in-depth studies and analysis of the electrical power grid’s behavior and performance. This comprehensive model incorporates essential factors such as power generation capacity, electrical losses, voltage levels, power flows, and system stability.
Power Grid Model is currently being applied in a wide variety of use cases, including grid planning, expansion, reliability, and congestion studies. It can also help in analyzing the impact of renewable energy integration, assessing the effects of disturbances or faults, and developing strategies for grid control and optimization.
What to expect
For the upcoming meetup we are organizing, we have an exciting lineup of activities planned:
-Insightful presentations covering two practical applications of the Power Grid Model.
-An update on the latest advancements in Power Grid -Model technology during the first and second quarters of 2024.
-An interactive brainstorming session to discuss and propose new feature requests.
-An opportunity to connect with fellow Power Grid Model enthusiasts and users.
UiPath Test Automation using UiPath Test Suite series, part 6DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 6. In this session, we will cover Test Automation with generative AI and Open AI.
UiPath Test Automation with generative AI and Open AI webinar offers an in-depth exploration of leveraging cutting-edge technologies for test automation within the UiPath platform. Attendees will delve into the integration of generative AI, a test automation solution, with Open AI advanced natural language processing capabilities.
Throughout the session, participants will discover how this synergy empowers testers to automate repetitive tasks, enhance testing accuracy, and expedite the software testing life cycle. Topics covered include the seamless integration process, practical use cases, and the benefits of harnessing AI-driven automation for UiPath testing initiatives. By attending this webinar, testers, and automation professionals can gain valuable insights into harnessing the power of AI to optimize their test automation workflows within the UiPath ecosystem, ultimately driving efficiency and quality in software development processes.
What will you get from this session?
1. Insights into integrating generative AI.
2. Understanding how this integration enhances test automation within the UiPath platform
3. Practical demonstrations
4. Exploration of real-world use cases illustrating the benefits of AI-driven test automation for UiPath
Topics covered:
What is generative AI
Test Automation with generative AI and Open AI.
UiPath integration with generative AI
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfChart Kalyan
A Mix Chart displays historical data of numbers in a graphical or tabular form. The Kalyan Rajdhani Mix Chart specifically shows the results of a sequence of numbers over different periods.
Your One-Stop Shop for Python Success: Top 10 US Python Development Providersakankshawande
Simplify your search for a reliable Python development partner! This list presents the top 10 trusted US providers offering comprehensive Python development services, ensuring your project's success from conception to completion.
Succint Data Structures for Range Minimum ProblemsSebastian Wild
This was an invited talk I gave at Purdue University. It introduces some concepts and techniques of succinct data structures along the example of the range-minimum query problem, and presents my new, average-case space optimal solution.
Entropy Trees & Range-Minimum Queries in Optimal Average-Case SpaceSebastian Wild
I gave this talk at the Dagstuhl Seminar 19051
on Data Structures for the Cloud and External Memory Data
(https://www.dagstuhl.de/en/program/calendar/semhp/?semnr=19051)
Sesquickselect: One and a half pivot for cache efficient selectionSebastian Wild
These are the slides for my ANALCO about sesquickselect, a novel quickselect variant. The paper and further details here: https://www.wild-inter.net/publications/martinez-nebel-wild-2019
Average cost of QuickXsort with pivot samplingSebastian Wild
The document discusses QuickXsort, a variant of Quicksort that uses a sorting algorithm X to sort one subproblem during recursion. QuickXsort is described as using Mergesort for X to achieve near-optimal comparison counts while sorting in-place. Merging in Mergesort is explained as possible through swapping elements between runs and a buffer to merge runs together without using extra space.
Nearly-optimal mergesort: Fast, practical sorting methods that optimally adap...Sebastian Wild
Mergesort can make use of existing order in the input by picking up existing runs, i.e., sorted segments. Since the lengths of these runs can be arbitrary, simply merging them as they arrive can be wasteful—merging can degenerate to inserting a single elements into long run.
In this talk, I show that we can find an optimal merging order (up to lower order terms of costs) with negligible overhead and thereby get the same worst-case guarantee as for standard mergesort (up to lower order terms), while exploiting existing runs if present. I present two new mergesort variants, peeksort and powersort, that are simple, stable, optimally adaptive and fast in practice (never slower than standard mergesort and Timsort, but significantly faster on certain inputs).
This talk was given at ESA 2018 and is based on joint work with Ian Munro. ItThe paper and further information can be found on my website:
https://www.wild-inter.net/publications/munro-wild-2018
The document describes the process of quicksort and building a binary search tree on the same data. It shows quicksort sorting an array from 7 4 2 9 1 3 8 5 6 to its sorted order, and building a corresponding binary search tree from the sorted array. It notes that the recursion tree of quicksort is equivalent to the built binary search tree, and that the number of comparisons in quicksort equals building and searching the tree. It questions how median-of-three quicksort and other variants relate to building fringe-balanced search trees.
Webinar: Designing a schema for a Data WarehouseFederico Razzoli
Are you new to data warehouses (DWH)? Do you need to check whether your data warehouse follows the best practices for a good design? In both cases, this webinar is for you.
A data warehouse is a central relational database that contains all measurements about a business or an organisation. This data comes from a variety of heterogeneous data sources, which includes databases of any type that back the applications used by the company, data files exported by some applications, or APIs provided by internal or external services.
But designing a data warehouse correctly is a hard task, which requires gathering information about the business processes that need to be analysed in the first place. These processes must be translated into so-called star schemas, which means, denormalised databases where each table represents a dimension or facts.
We will discuss these topics:
- How to gather information about a business;
- Understanding dictionaries and how to identify business entities;
- Dimensions and facts;
- Setting a table granularity;
- Types of facts;
- Types of dimensions;
- Snowflakes and how to avoid them;
- Expanding existing dimensions and facts.
Ivanti’s Patch Tuesday breakdown goes beyond patching your applications and brings you the intelligence and guidance needed to prioritize where to focus your attention first. Catch early analysis on our Ivanti blog, then join industry expert Chris Goettl for the Patch Tuesday Webinar Event. There we’ll do a deep dive into each of the bulletins and give guidance on the risks associated with the newly-identified vulnerabilities.
GraphRAG for Life Science to increase LLM accuracyTomaz Bratanic
GraphRAG for life science domain, where you retriever information from biomedical knowledge graphs using LLMs to increase the accuracy and performance of generated answers
HCL Notes and Domino License Cost Reduction in the World of DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-and-domino-license-cost-reduction-in-the-world-of-dlau/
The introduction of DLAU and the CCB & CCX licensing model caused quite a stir in the HCL community. As a Notes and Domino customer, you may have faced challenges with unexpected user counts and license costs. You probably have questions on how this new licensing approach works and how to benefit from it. Most importantly, you likely have budget constraints and want to save money where possible. Don’t worry, we can help with all of this!
We’ll show you how to fix common misconfigurations that cause higher-than-expected user counts, and how to identify accounts which you can deactivate to save money. There are also frequent patterns that can cause unnecessary cost, like using a person document instead of a mail-in for shared mailboxes. We’ll provide examples and solutions for those as well. And naturally we’ll explain the new licensing model.
Join HCL Ambassador Marc Thomas in this webinar with a special guest appearance from Franz Walder. It will give you the tools and know-how to stay on top of what is going on with Domino licensing. You will be able lower your cost through an optimized configuration and keep it low going forward.
These topics will be covered
- Reducing license cost by finding and fixing misconfigurations and superfluous accounts
- How do CCB and CCX licenses really work?
- Understanding the DLAU tool and how to best utilize it
- Tips for common problem areas, like team mailboxes, functional/test users, etc
- Practical examples and best practices to implement right away
Main news related to the CCS TSI 2023 (2023/1695)Jakub Marek
An English 🇬🇧 translation of a presentation to the speech I gave about the main changes brought by CCS TSI 2023 at the biggest Czech conference on Communications and signalling systems on Railways, which was held in Clarion Hotel Olomouc from 7th to 9th November 2023 (konferenceszt.cz). Attended by around 500 participants and 200 on-line followers.
The original Czech 🇨🇿 version of the presentation can be found here: https://www.slideshare.net/slideshow/hlavni-novinky-souvisejici-s-ccs-tsi-2023-2023-1695/269688092 .
The videorecording (in Czech) from the presentation is available here: https://youtu.be/WzjJWm4IyPk?si=SImb06tuXGb30BEH .
Digital Marketing Trends in 2024 | Guide for Staying AheadWask
https://www.wask.co/ebooks/digital-marketing-trends-in-2024
Feeling lost in the digital marketing whirlwind of 2024? Technology is changing, consumer habits are evolving, and staying ahead of the curve feels like a never-ending pursuit. This e-book is your compass. Dive into actionable insights to handle the complexities of modern marketing. From hyper-personalization to the power of user-generated content, learn how to build long-term relationships with your audience and unlock the secrets to success in the ever-shifting digital landscape.
5th LF Energy Power Grid Model Meet-up SlidesDanBrown980551
5th Power Grid Model Meet-up
It is with great pleasure that we extend to you an invitation to the 5th Power Grid Model Meet-up, scheduled for 6th June 2024. This event will adopt a hybrid format, allowing participants to join us either through an online Mircosoft Teams session or in person at TU/e located at Den Dolech 2, Eindhoven, Netherlands. The meet-up will be hosted by Eindhoven University of Technology (TU/e), a research university specializing in engineering science & technology.
Power Grid Model
The global energy transition is placing new and unprecedented demands on Distribution System Operators (DSOs). Alongside upgrades to grid capacity, processes such as digitization, capacity optimization, and congestion management are becoming vital for delivering reliable services.
Power Grid Model is an open source project from Linux Foundation Energy and provides a calculation engine that is increasingly essential for DSOs. It offers a standards-based foundation enabling real-time power systems analysis, simulations of electrical power grids, and sophisticated what-if analysis. In addition, it enables in-depth studies and analysis of the electrical power grid’s behavior and performance. This comprehensive model incorporates essential factors such as power generation capacity, electrical losses, voltage levels, power flows, and system stability.
Power Grid Model is currently being applied in a wide variety of use cases, including grid planning, expansion, reliability, and congestion studies. It can also help in analyzing the impact of renewable energy integration, assessing the effects of disturbances or faults, and developing strategies for grid control and optimization.
What to expect
For the upcoming meetup we are organizing, we have an exciting lineup of activities planned:
-Insightful presentations covering two practical applications of the Power Grid Model.
-An update on the latest advancements in Power Grid -Model technology during the first and second quarters of 2024.
-An interactive brainstorming session to discuss and propose new feature requests.
-An opportunity to connect with fellow Power Grid Model enthusiasts and users.
UiPath Test Automation using UiPath Test Suite series, part 6DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 6. In this session, we will cover Test Automation with generative AI and Open AI.
UiPath Test Automation with generative AI and Open AI webinar offers an in-depth exploration of leveraging cutting-edge technologies for test automation within the UiPath platform. Attendees will delve into the integration of generative AI, a test automation solution, with Open AI advanced natural language processing capabilities.
Throughout the session, participants will discover how this synergy empowers testers to automate repetitive tasks, enhance testing accuracy, and expedite the software testing life cycle. Topics covered include the seamless integration process, practical use cases, and the benefits of harnessing AI-driven automation for UiPath testing initiatives. By attending this webinar, testers, and automation professionals can gain valuable insights into harnessing the power of AI to optimize their test automation workflows within the UiPath ecosystem, ultimately driving efficiency and quality in software development processes.
What will you get from this session?
1. Insights into integrating generative AI.
2. Understanding how this integration enhances test automation within the UiPath platform
3. Practical demonstrations
4. Exploration of real-world use cases illustrating the benefits of AI-driven test automation for UiPath
Topics covered:
What is generative AI
Test Automation with generative AI and Open AI.
UiPath integration with generative AI
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfChart Kalyan
A Mix Chart displays historical data of numbers in a graphical or tabular form. The Kalyan Rajdhani Mix Chart specifically shows the results of a sequence of numbers over different periods.
Your One-Stop Shop for Python Success: Top 10 US Python Development Providersakankshawande
Simplify your search for a reliable Python development partner! This list presents the top 10 trusted US providers offering comprehensive Python development services, ensuring your project's success from conception to completion.
Introduction of Cybersecurity with OSS at Code Europe 2024Hiroshi SHIBATA
I develop the Ruby programming language, RubyGems, and Bundler, which are package managers for Ruby. Today, I will introduce how to enhance the security of your application using open-source software (OSS) examples from Ruby and RubyGems.
The first topic is CVE (Common Vulnerabilities and Exposures). I have published CVEs many times. But what exactly is a CVE? I'll provide a basic understanding of CVEs and explain how to detect and handle vulnerabilities in OSS.
Next, let's discuss package managers. Package managers play a critical role in the OSS ecosystem. I'll explain how to manage library dependencies in your application.
I'll share insights into how the Ruby and RubyGems core team works to keep our ecosystem safe. By the end of this talk, you'll have a better understanding of how to safeguard your code.
Taking AI to the Next Level in Manufacturing.pdfssuserfac0301
Read Taking AI to the Next Level in Manufacturing to gain insights on AI adoption in the manufacturing industry, such as:
1. How quickly AI is being implemented in manufacturing.
2. Which barriers stand in the way of AI adoption.
3. How data quality and governance form the backbone of AI.
4. Organizational processes and structures that may inhibit effective AI adoption.
6. Ideas and approaches to help build your organization's AI strategy.
How to Get CNIC Information System with Paksim Ga.pptxdanishmna97
Pakdata Cf is a groundbreaking system designed to streamline and facilitate access to CNIC information. This innovative platform leverages advanced technology to provide users with efficient and secure access to their CNIC details.
How to Get CNIC Information System with Paksim Ga.pptx
Average Case Analysis of Java 7’s Dual Pivot Quicksort
1. Average Case Analysis of
Java 7’s Dual Pivot Quicksort
Sebastian Wild Markus E. Nebel
[s_wild, nebel] @cs.uni-kl.de
Computer Science Department
University of Kaiserslautern
September 11, 2012
20th European Symposium on Algorithms
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 1 / 15
2. Classic Quicksort
Classic Quicksort with Hoare’s Crossing Pointer Technique
2 9 5 4 1 7 8 3 6
. . . by example
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 2 / 15
3. Classic Quicksort
Classic Quicksort with Hoare’s Crossing Pointer Technique
2 9 5 4 1 7 8 3 6
Select one element as pivot.
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 2 / 15
4. Classic Quicksort
Classic Quicksort with Hoare’s Crossing Pointer Technique
2 9 5 4 1 7 8 3 6
Only value relative to pivot counts.
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 2 / 15
5. Classic Quicksort
Classic Quicksort with Hoare’s Crossing Pointer Technique
2 9 5 4 1 7 8 3 6
Left pointer scans until first large element.
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 2 / 15
6. Classic Quicksort
Classic Quicksort with Hoare’s Crossing Pointer Technique
2 9 5 4 1 7 8 3 6
Right pointer scans until first small element.
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 2 / 15
16. Dual Pivot Quicksort
“new” idea: use two pivots p < q
3 5 1 8 4 7 2 9 6
p q
How to do partitioning?
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 3 / 15
17. Dual Pivot Quicksort
“new” idea: use two pivots p < q
3 5 1 8 4 7 2 9 6
p q
How to do partitioning?
1 For each element x, determine its class
small for x < p
medium for p < x < q
large for q < x
by comparing x to p and/or q
2 Arrange elements according to classes p q
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 3 / 15
18. Dual Pivot Quicksort – Previous Work
Robert Sedgewick, 1975
in-place dual pivot Quicksort implementation
more comparisons and swaps than classic Quicksort
Pascal Hennequin, 1991
comparisons for list-based Quicksort with r pivots
r=2 same #comparisons as classic Quicksort
5
in one partitioning step: 3 comparisons per element
r>2 very small savings, but complicated partitioning
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 4 / 15
19. Dual Pivot Quicksort – Previous Work
Robert Sedgewick, 1975
in-place dual pivot Quicksort implementation
more comparisons and swaps than classic Quicksort
Pascal Hennequin, 1991
comparisons for list-based Quicksort with r pivots
r=2 same #comparisons as classic Quicksort
5
in one partitioning step: 3 comparisons per element
r>2 very small savings, but complicated partitioning
Using two pivots does not pay.
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 4 / 15
20. Dual Pivot Quicksort – Previous Work
Robert Sedgewick, 1975
in-place dual pivot Quicksort implementation
more comparisons and swaps than classic Quicksort
Pascal Hennequin, 1991
comparisons for list-based Quicksort with r pivots
r=2 same #comparisons as classic Quicksort
5
in one partitioning step: 3 comparisons per element
r>2 very small savings, but complicated partitioning
Using two pivots does not pay.
Vladimir Yaroslavskiy, 2009
new implementation of dual pivot Quicksort
now used in Java 7’s runtime library
runtime studies, no rigorous analysis
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 4 / 15
21. Dual Pivot Quicksort – Comparison Costs
How many comparisons to determine classes ( small , medium or large ) ?
Assume, we first compare with p.
small elements need 1, others 2 comparisons
on average: 1 of all elements are small
3
1 2 5
3 · 1 + 3 · 2 = 3 comparisons per element
if inputs are uniform random permutations,
classes of x and y are independent
Any partitioning method needs at least
5 20
3 (n − 2) ∼ 12 n comparisons on average?
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 5 / 15
22. Dual Pivot Quicksort – Comparison Costs
How many comparisons to determine classes ( small , medium or large ) ?
Assume, we first compare with p.
small elements need 1, others 2 comparisons
on average: 1 of all elements are small
3
1 2 5
3 · 1 + 3 · 2 = 3 comparisons per element
if inputs are uniform random permutations,
classes of x and y are independent
Any partitioning method needs at least
5 20
3 (n − 2) ∼ 12 n comparisons on average?
No! (Stay tuned . . . )
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 5 / 15
23. Beating the “Lower Bound”
∼ 20 n comparisons only needed,
12
if there is one comparison location,
then checks for x and y independent
But: Can have several comparison locations!
Here: Assume two locations C1 and C2 s. t.
C1 first compares with p. C1 executed often, iff p is large.
C2 first compares with q. C2 executed often, iff q is small.
C1 executed often
iff many small elements
iff good chance that C1 needs only one comparison
(C2 similar)
5
less comparisons than 3 per elements on average
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 6 / 15
24. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
p q
3 5 1 8 4 7 2 9 6
Select two elements as pivots.
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
25. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
p q
3 5 1 8 4 7 2 9 6
Only value relative to pivot counts.
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
26. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
k
3 5 1 8 4 7 2 9 6
A[k] is medium go on
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
27. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
k
3 5 1 8 4 7 2 9 6
A[k] is small Swap to left
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
28. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
k
3 5 1 8 4 7 2 9 6
Swap small element to left end.
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
29. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
k
3 1 5 8 4 7 2 9 6
Swap small element to left end.
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
30. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
k
3 1 5 8 4 7 2 9 6
A[k] is large Find swap partner.
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
31. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
k g
3 1 5 8 4 7 2 9 6
A[k] is large Find swap partner:
g skips over large elements.
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
32. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
k g
3 1 5 8 4 7 2 9 6
A[k] is large Swap
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
33. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
k g
3 1 5 2 4 7 8 9 6
A[k] is large Swap
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
34. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
k g
3 1 5 2 4 7 8 9 6
A[k] is old A[g], small Swap to left
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
35. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
k g
3 1 2 5 4 7 8 9 6
A[k] is old A[g], small Swap to left
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
36. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
k g
3 1 2 5 4 7 8 9 6
A[k] is medium go on
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
37. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
k g
3 1 2 5 4 7 8 9 6
A[k] is large Find swap partner.
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
38. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
g k
3 1 2 5 4 7 8 9 6
A[k] is large Find swap partner:
g skips over large elements.
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
39. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
g k
3 1 2 5 4 7 8 9 6
g and k have crossed!
Swap pivots in place
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
40. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
g k
2 1 3 5 4 6 8 9 7
g and k have crossed!
Swap pivots in place
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
41. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
2 1 3 5 4 6 8 9 7
Partitioning done!
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
42. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
2 1 3 5 4 6 8 9 7
Recursively sort three sublists.
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
43. Yaroslavskiy’s Quicksort – Example
Yaroslavskiy’s Dual Pivot Quicksort
(used in Oracle’s Java 7 Arrays.sort(int[]))
1 2 3 4 5 6 7 8 9
Done.
Invariant: <p p ◦ q k ? g >q
→ → ←
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 7 / 15
44. Yaroslavskiy’s Quicksort
DUALPIVOTQUICKSORT YAROSLAVSKIY(A, left, right)
1 if right − left 1
2 p := A[left]; q := A[right]
3 if p > q then Swap p and q end if
4 := left + 1; g := right − 1; k :=
5 while k g
6 if A[k] < p
7 Swap A[k] and A[ ] ; := + 1
8 else if A[k] q
9 while A[g] > q and k < g do g := g − 1 end while
10 Swap A[k] and A[g] ; g := g − 1
11 if A[k] < p
12 Swap A[k] and A[ ] ; := + 1
13 end if
14 end if
15 k := k + 1
16 end while
17 := − 1; g := g + 1
18 Swap A[left] and A[ ] ; Swap A[right] and A[g]
19 DUALPIVOTQUICKSORT YAROSLAVSKIY(A, left , − 1 )
20 DUALPIVOTQUICKSORT YAROSLAVSKIY(A, + 1 , g − 1)
21 DUALPIVOTQUICKSORT YAROSLAVSKIY(A, g + 1, right )
22 end if
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 8 / 15
45. Yaroslavskiy’s Quicksort
DUALPIVOTQUICKSORT YAROSLAVSKIY(A, left, right)
1 if right − left 1
2 p := A[left]; q := A[right] 2 comparison locations
3 if p > q then Swap p and q end if
4 := left + 1; g := right − 1; k := Ck handles pointer k
5 while k g
6 Ck if A[k] < p Cg handles pointer g
7 Swap A[k] and A[ ] ; := + 1
8 Ck else if A[k] q
9 Cg while A[g] > q and k < g do g := g − 1 end while
10 Swap A[k] and A[g] ; g := g − 1
11 Cg if A[k] < p
12 Swap A[k] and A[ ] ; := + 1
13 end if Ck first checks < p
14 end if Ck if needed q
15 k := k + 1
16 end while
Cg first checks > q
17 := − 1; g := g + 1
18 Swap A[left] and A[ ] ; Swap A[right] and A[g] Cg if needed < p
19 DUALPIVOTQUICKSORT YAROSLAVSKIY(A, left , − 1 )
20 DUALPIVOTQUICKSORT YAROSLAVSKIY(A, + 1 , g − 1)
21 DUALPIVOTQUICKSORT YAROSLAVSKIY(A, g + 1, right )
22 end if
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 8 / 15
46. Analysis of Yaroslavskiy’s Algorithm
In this talk:
only number of comparisons (swaps similar)
all exact results
only leading term asymptotics
in the paper
some marginal cases excluded
Cn expected #comparisons to sort random permutation of {1, . . . , n}
Cn satisfies recurrence relation
2
C n = cn + n(n−1) Cp−1 + Cq−p−1 + Cn−q ,
1 p<q n
with cn expected #comparisons in first partitioning step
recurrence solvable by standard methods
6
linear cn ∼ a · n yields Cn ∼ 5 a · n ln n.
need to compute cn
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 9 / 15
47. Analysis of Yaroslavskiy’s Algorithm
first comparison for all elements (at Ck or Cg )
∼ n comparisons
second comparison for some elements at Ck resp. Cg
. . . but how often are Ck resp. Cg reached?
Ck : all non- small elements reached by pointer k.
Cg : all non- large elements reached by pointer g.
second comparison for medium elements not avoidable
1
∼ 3 n comparisons in expectation
it remains to count:
large elements reached by k and
small elements reached by g.
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 10 / 15
48. Analysis of Yaroslavskiy’s Algorithm
Second comparisons for small and large elements?
Depends on location!
Ck l @ K: number of large elements at positions K.
Cg s @ G: number of small elements at positions G.
Recall invariant: <p p ◦ q k ? g >q
→ → ←
k and g cross at (rank of) q
l@K = 3 s@G = 2
p q
positions K = {2, . . . , q − 1} G = {q, . . . , n − 1}
for given p and q, l @ K hypergeometrically distributed
q−2
E [l @ K | p, q] = (n − q) n−2
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 11 / 15
49. Analysis of Yaroslavskiy’s Algorithm
law of total expectation:
q−2
E [l @ K] = Pr[pivots (p, q)] · (n − q) n−2 ∼ 1
6n
1 p<q n
Similarly: E [s @ G] ∼ 1
12 n.
Summing up contributions:
cn ∼ n first comparisons
1
+ 3n medium elements
1
+ 6n large elements at Ck
1
+ 12 n small elements at Cg
19
= 12 n
20
Recall: “lower bound” was 12 n.
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 12 / 15
50. Results
Comparisons:
6 19
Yaroslavskiy needs ∼ 5 · 12 n ln n = 1.9 n ln n on average.
Classic Quicksort needs ∼ 2 n ln n comparisons!
Swaps:
∼ 0.6 n ln n swaps for Yaroslavskiy’s algorithm vs.
∼ 0.3 n ln n swaps for classic Quicksort
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 13 / 15
51. Summary
We can exploit asymmetries to save comparisons!
Many extra swaps might hurt.
However, runtime studies favor dual pivot Quicksort:
more than 10 % faster!
Classic Quicksort
8 Yaroslavskiy
10−6 · n ln n
time
7.5
Normalized Java runtimes (in ms).
Average and standard deviation
7 of 1000 random permutations
per size.
0 0.5 1 1.5 2
n ·106
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 14 / 15
52. Open Questions
Closer look at runtime: Why is Yaroslavskiy so fast in practice?
experimental studies?
Input distributions other than random permutations
equal elements
presorted lists
Variances of Costs, Limiting Distributions?
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 15 / 15
53. Lower Bound on Comparisons
How clever can dual pivot paritioning be?
For lower bound, assume
random permutation model
pivots are selected uniformly
an oracle tells us, whether more small or more large elements occur
1 comparison for frequent extreme elements
2 comparisons for middle and rare extreme elements
2
(n − 2) + n(n−1) (q − p − 1) + min{p − 1, n − q}
1 p<q n
3 18
∼ 2n = 12 n
Even with unrealistic oracle, not much better than Yaroslavskiy
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 16 / 15
54. Counting Primitive Instructions à la Knuth
for implementations MMIX and Java bytecode
determine exact expected overall costs
MMIX: processor cycles “oops” υ and memory accesses “mems” µ
Bytecode: #executed instructions
divide program code into basic blocks
count cost contribution for blocks
determine expected execution frequencies of blocks
in first partitioning step
total frequency via recurrence relation
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 17 / 15
55. Counting Primitive Instructions à la Knuth
Results:
Algorithm total expected costs
MMIX Classic (11υ+2.6µ)(n+1)Hn +(11υ+3.7µ)n+(−11.5υ−4.5µ)
(13.1υ+2.8µ)(n + 1)Hn + (−1.695υ + 1.24µ)n
MMIX Yaroslavskiy
+ (−1.6783υ − 1.793µ)
Bytecode Classic 18(n + 1)Hn + 2n − 15
Bytecode
23.8(n + 1)Hn − 8.71n − 4.743
Yaroslavskiy
Classic Quicksort significantly better in both measures . . .
Why is Yaroslavskiy faster in practice?
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 18 / 15
56. Pivot Sampling
Idea: choose pivots from random sample of list
median for classic Quicksort
tertiles for dual pivot Quicksort
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 19 / 15
57. Pivot Sampling
Idea: choose pivots from random sample of list
median for classic Quicksort
tertiles for dual pivot Quicksort?
or asymmetric order statistics?
Here: sample of constant size k
choose pivots, such that t1 elements < p,
t2 elements between p and q,
t3 = k − 2 − t1 − t2 larger > q
Allows to “push” pivot towards desired order statistic of list
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 19 / 15
58. Pivot Sampling
leading n ln n term coefficient of
Comparisons for k = 11
tertiles
(t1 , t2 , t3 ) = (3, 3, 3)
∼ 1.609 n ln n
minimum
(t1 , t2 , t3 ) = (4, 2, 3)
∼ 1.585 n ln n
asymmetric order
statistics are better!
Sebastian Wild Java 7’s Dual Pivot Quicksort 2012/09/11 20 / 15