This is Minimum Euclidean Matching in 2D. The link contains a bibliography of what’s known about this problem. Given that you want to minimize the total length, the non-intersection constraint is redundant, as the length of any pair of segments that cross can be reduced by uncrossing them.

### Related Contents:

- Determine if two rectangles overlap each other?
- Fastest way to get the integer part of sqrt(n)?
- What is the most effective way for float and double comparison?
- Best way to reverse a string
- Why does GCC generate 15-20% faster code if I optimize for size instead of speed?
- Fastest way to determine if an integer is between two integers (inclusive) with known sets of values
- How to write a large buffer into a binary file in C++, fast?
- Throwing the fattest people off of an overloaded airplane.
- Is it better to use std::memcpy() or std::copy() in terms to performance?
- Rotating a point about another point (2D)
- Is it more efficient to copy a vector by reserving and copying, or by creating and swapping? [duplicate]
- A fast method to round a double to a 32-bit int explained
- How expensive is RTTI?
- Why is processing an unsorted array the same speed as processing a sorted array with modern x86-64 clang?
- Using scanf() in C++ programs is faster than using cin?
- Any optimization for random access on a very big array when the value in 95% of cases is either 0 or 1?
- How to overload std::swap()
- C++ performance challenge: integer to std::string conversion
- Magic number in boost::hash_combine
- Can const-correctness improve performance?
- Calculate mean and standard deviation from a vector of samples in C++ using Boost
- Why is memmove faster than memcpy?
- Is accessing data in the heap faster than from the stack?
- What is the fastest way to transpose a matrix in C++?
- Why are Python Programs often slower than the Equivalent Program Written in C or C++?
- Does the range-based ‘for’ loop deprecate many simple algorithms?
- Generating permutations of a set (most efficiently)
- Why does my Intel Skylake / Kaby Lake CPU incur a mysterious factor 3 slowdown in a simple hash table implementation?
- Is using double faster than float?
- Easiest way of using min priority queue with key update in C++
- F# performance in scientific computing
- Why is the construction of std::optional more expensive than a std::pair?
- boost serialization vs google protocol buffers? [closed]
- Emulate “double” using 2 “float”s
- Writing function definition in header files in C++
- What is the most efficient way to append one std::vector to the end of another?
- Use of for_each on map elements
- Iterative DFS vs Recursive DFS and different elements order
- Is integer multiplication really done at the same speed as addition on a modern CPU?
- Using AVX CPU instructions: Poor performance without “/arch:AVX”
- What is IACA and how do I use it?
- Hashtable in C++?
- How can I sort an STL map by value?
- How to add two numbers without using ++ or + or another arithmetic operator
- The fastest C++ algorithm for string testing against a list of predefined seeds (case insensitive)
- Fit rectangle around points
- Is there a way to shorten this while condition?
- Performance of dynamic_cast?
- Why is pow(int, int) so slow?
- linux perf: how to interpret and find hotspots