|
|
|
|
#1 |
|
Участник
|
Какой там внутри цикла?! Они внутри 2-х if!
|
|
|
|
|
#2 |
|
Участник
|
Точно! Вчера спросонья ошипся.
Значит, и в моем алгоритме можно вынести оба 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 | |||
|