Daniel Sapoundjiev on
Outrun more than 2 paths algorithm - Big chase Outrun more than 2 paths algorithmOutrun algorithms 8 March 2014 ВъведениеПонякога се налага да се надбягат повече от 2 пътя. Например, когато има повече от 2 пътя и трябва всеки да се надбяга с всеки. Когато се надбягват 2 пътя при напредването на един път се съобразява, кога ще надмине другия. Но когато са повече пътища, то втория път може да надмине третия, а да не надмине първия, който е бил най-вляво. За целта може да се поддържат пътищата винаги подредени така, че да се проверява дали активния път ще надмине първия път в списъка. Ако не го надмине, то няма да надмине и другите в списъка. Ако го надмине, то може да надмине и следващите. Проверява колко ще надмине и застава след тях. Пример
Примерно имаме 3 поредици РесурсиАктивен път - Активни пътища - Активен сегмент от път - Активен сегмент за надбягване - Бегач на пътя - Списък на чакащите (на следващите) - Активен участъкПърво единия път започва. Активен му е първия участък. Ако не изпреварва сегмента на следващия път става активен следващия участък на същия път. Ако изпреварва слеващия Смяна на активния пътКогато активния път задмине втория път, то е възможно да задмине и други пътища след него. Затова се премества след пътищата, които е задминал, за да се запази подредбата на пътищата по най-ляв ективен сегмент. Вторият път става първи. Намира пътищата които надбягва ако надбягва всички пътища застава последен
ако надбяга един или няколко, но не е последен
Това е пълния код, където marker е активния маркер, който се мести, а marker2 е следващия след него. Покриват се случаите, когато - втория маркер е последен - когато задминава всички маркери - когато се вмъква между маркери
Условия за крайВъв всеки момент един от двата пътя догонва другия. Когато един път догонва друг, то може да не успее да го догони. Тогава последния елемент от пътя, който достига до края, му се присвоява следващ елемент, този който догонва. След което останалите елементи от другия път си запазват подредбата. Може да не се проверяват до края елементите. Последния елемент ще си има Nil за следващ елемент. Така приключването на алгоритъма се проверява за достигане на края на пътя, който догонва. ПрограмиранеВ програмирането надбягващия се алгоритъм може да се изнесе в отделен клас. Който да си има първоначално догонване, проверки. Да си прави всичко. Да си взема стойности за двата списъка. Да вика за проверка. Може да ползва и компаратор. И да му се подават стандартни списъци и да ги надбягва. Код
Back to main menu
|