// This function splits the input sequence or set into one or more equivalence classes.
// is_equal(a,b,...) returns non-zero if the two sequence elements
// belong to the same class. The function returns sequence of integers -
// 0-based class indexes for each element.
//
// The algorithm is described in "Introduction to Algorithms"
// by Cormen, Leiserson and Rivest, chapter "Data structures for disjoint sets"
CV_IMPL int
cvSeqPartition( const CvSeq* seq, CvMemStorage* storage, CvSeq** labels,
CvCmpFunc is_equal, void* userdata )
Какая часть требует более подробного объяснения?
Обновление:
В качестве примера рассмотрим следующую последовательность целых чисел:
{9,5,7,5,9,9}
Когда функция is_equal
просто проверяет целочисленное равенство, cvSeqPartition
найдет 3 класса:
{9,9,9} {5,5} {7}
, поэтому cvSeqPartition
будет иметь значение
{0,1,2,1,0,0}
, где каждое число равноиндекс класса элемента.