I have a list of pairs of strings (or pairs of hashes) called V. I want to create a list W by removing elements from V such that W has as many pairs as possible and: There are no i,j such that W[i].first==W[j].first There are no i,j such that W[i].second==W[j].second I know it can be solved with max-flow, but the complexity would be at least O(|V|^2) because that would be the amount of edges in the graph. Is there any algorithm faster than that?, the algorithm might be probabilistic.
This is literally maximum matching. But the complexity should be $$$O(V \sqrt{V})$$$ if one uses Dinic/Hopcroft-Karp for solving the maximum matching.
The amount of edges would be |V|.