Daniel
Sapoundjiev on
Outrun algorithm - Catch me if you can Outrun algorithmOutrun algorithms 8 March 2014 ВъведениеМного полезно е понякога вместо да се изпробват всички възможни варианти да се надбягват стойностите При догонващия алгоритъм броят на итерациите които ще направим не надвишава сбора на стойностите на двата списъка. Така например ако всеки списък има по 100 стойности, то няма да надвиши 200 итерации. Докато ако се правят проверки на всички възможни ще бъде 10 000. Разликата е 50 пъти. При първоначалното настигане няма извършване на проверки. Също след задминаване на края, също няма проверки, дори не се итерира там. Така примерно от тези 200 може в началото да няма проверки. Примерно за първите 50. И ако се задмине края на 150, то последните 50 въобще да не се итерират. Което ще бъде 100 итерации с проверки, и 50 итерации без проверки.
Примерно имаме поредица от стойности 1, 10, 25, 50 Но може да има няколко числа от първата поредица, които да са преди първото число от втората поредица. Примерно 1,3,4, 6 и 5,7,9. Така 1,3,4 ще бъдат преди първото число от втората поредица. Условия за крайВъв всеки момент един от двата пътя догонва другия. Когато един път догонва друг, то може да не успее да го догони. Тогава последния елемент от пътя, който достига до края, му се присвоява следващ елемент, този който догонва. След което останалите елементи от другия път си запазват подредбата. Може да не се проверяват до края елементите. Последния елемент ще си има Nil за следващ елемент. Така приключването на алгоритъма се проверява за достигане на края на пътя, който догонва. ПрограмиранеВ програмирането надбягващия се алгоритъм може да се изнесе в отделен клас. Който да си има първоначално догонване, проверки. Да си прави всичко. Да си взема стойности за двата списъка. Да вика за проверка. Може да ползва и компаратор. И да му се подават стандартни списъци и да ги надбягва. Код
Back to main menu
|