![]() |
#14 |
Участник
|
Точно! Вчера спросонья ошипся.
Значит, и в моем алгоритме можно вынести оба difference за цикл. вот и получается структурная разница - у тебя intersection + difference, а у меня difference + difference. вот мой исправленный алгоритм без итераторов на псевдокоде: (плюс, в качестве побочного эффекта, исходные множества oldSet, newSet остаются не изменными. т.е. удалось избавиться от побочных эффектов в передаваемых в алгоритм параметрах ![]() X++: [oldKey, newKey] getPair(deadSet, seedSet) { if( deadSet.empty() ) return []; // нечего менять - поэтому ничего менять не нужно if( seedSet.empty() ) return []; // не на что менять - поэтому ничего менять не нужно newKey = seedSet.anyValue(); // любое значение из множества зародышей oldKey = deadSet.anyValue(); // любое значение из множества мертвеньких return [oldKey, newKey]; } seedSet = Set::difference( newSet, oldSet ); // зародыши: новые значения будут браться отсюда deadSet = Set::difference( oldSet, newSet ); // мертвенькие: они исчезнут pair = getPair( deadSet, seedSet ); while( pair != [] ) { [oldKey, newKey] = pair; // do something with oldKey, newKey // next iteration deadSet.remove(oldKey); seedSet.remove(newKey); pair = getPair( deadSet, seedSet ); } |
|
|
За это сообщение автора поблагодарили: gl00mie (5). |
Теги |
законченный пример, уникальность |
|
![]() |
||||
Тема | Ответов | |||
Универсальный изменятель значений полей | 17 |
|