diff options
author | max42 <max42@yandex-team.com> | 2023-06-30 11:13:34 +0300 |
---|---|---|
committer | max42 <max42@yandex-team.com> | 2023-06-30 11:13:34 +0300 |
commit | 3e1899838408bbad47622007aa382bc8a2b01f87 (patch) | |
tree | 0f21c1e6add187ddb6c3ccc048a7d640ce03fb87 /library/cpp/disjoint_sets/disjoint_sets.h | |
parent | 5463eb3f5e72a86f858a3d27c886470a724ede34 (diff) | |
download | ydb-3e1899838408bbad47622007aa382bc8a2b01f87.tar.gz |
Revert "YT-19324: move YT provider to ydb/library/yql"
This reverts commit ca272f12fdd0e8d5c3e957fc87939148f1caaf72, reversing
changes made to 49f8acfc8b0b5c0071b804423bcf53fda26c7c12.
Diffstat (limited to 'library/cpp/disjoint_sets/disjoint_sets.h')
-rw-r--r-- | library/cpp/disjoint_sets/disjoint_sets.h | 81 |
1 files changed, 0 insertions, 81 deletions
diff --git a/library/cpp/disjoint_sets/disjoint_sets.h b/library/cpp/disjoint_sets/disjoint_sets.h deleted file mode 100644 index 5768886704..0000000000 --- a/library/cpp/disjoint_sets/disjoint_sets.h +++ /dev/null @@ -1,81 +0,0 @@ -#pragma once - -#include <util/system/yassert.h> -#include <util/generic/vector.h> - -// Implementation of disjoint-set data structure with union by rank and path compression. -// See http://en.wikipedia.org/wiki/Disjoint-set_data_structure -class TDisjointSets { -public: - using TElement = size_t; - -private: - mutable TVector<TElement> Parents; - TVector<size_t> Ranks; - TVector<size_t> Sizes; - size_t NumberOfSets; - -public: - TDisjointSets(size_t setCount) - : Parents(setCount) - , Ranks(setCount, 0) - , Sizes(setCount, 1) - , NumberOfSets(setCount) - { - for (size_t i = 0; i < setCount; ++i) - Parents[i] = i; - } - - TElement CanonicSetElement(TElement item) const { - if (Parents[item] != item) - Parents[item] = CanonicSetElement(Parents[item]); - return Parents[item]; - } - - size_t SizeOfSet(TElement item) const { - return Sizes[CanonicSetElement(item)]; - } - - size_t InitialSetCount() const { - return Parents.size(); - } - - size_t SetCount() const { - return NumberOfSets; - } - - void UnionSets(TElement item1, TElement item2) { - TElement canonic1 = CanonicSetElement(item1); - TElement canonic2 = CanonicSetElement(item2); - if (canonic1 == canonic2) - return; - - --NumberOfSets; - if (Ranks[canonic1] < Ranks[canonic2]) { - Parents[canonic1] = canonic2; - Sizes[canonic2] += Sizes[canonic1]; - } else { - Parents[canonic2] = canonic1; - Sizes[canonic1] += Sizes[canonic2]; - Ranks[canonic2] += Ranks[canonic1] == Ranks[canonic2] ? 1 : 0; - } - } - - void Expand(size_t setCount) { - if (setCount < Parents.size()) { - return; - } - - size_t prevSize = Parents.size(); - Parents.resize(setCount); - Ranks.resize(setCount); - Sizes.resize(setCount); - NumberOfSets += setCount - prevSize; - - for (size_t i = prevSize; i < setCount; ++i) { - Parents[i] = i; - Ranks[i] = 0; - Sizes[i] = 1; - } - } -}; |