Loading...
DJColdBrain avatar DJColdBrain 9 Точки

Здравей колега. 

В цикъла while след първия if сложи else if.

Ето така:  else if (pos - step >= 0)

Защото няма смисъл ако може да скочи на дясно да проверява дали ще може да скочи наляво.

1
13/06/2017 13:17:49
dimitar90 avatar dimitar90 13 Точки

и това се отразява на бързината до такава степенн ? :)

0
DJColdBrain avatar DJColdBrain 9 Точки

Всъщност да. Ако например имаш много скокове на дястно той всеки път ще проверява за ляв скок. 

И ако бъде по средата и може да скочи на дясно той след първия скок е възможно да скочи надясно.

 

1
MartinBG avatar MartinBG 4803 Точки

На първо гледане, забелявам следните места за оптимизации по твоето решение:

 

- Многократно ползване на sequence.Length в цикъла. Това не е "безплатна" операция и в такива ситуации е добре да използваш променлива, напр. int lenght = sequence.Length

 

- Повтарящи се по смисъл проверки за край на while цикъла и в тялото на цикъла:

 

while (!(pos + step > sequence.Length && pos - step < 0))

if (pos + step < sequence.Length)

if (pos - step >= 0)

 

Може да промениш цикъла на while (true) и да го break-неш като му дойде времето.

 

- Както е отбелязал и колегата @DJColdBrain по-горе, втората проверка е излишна. Един вариант е да използваш else-if. Друг вариант е да използваш continue в тялото на първия if.

 

Ето едно решение с тези "оптимизации".

(използвам long за типовете данни, което най-вероятно е излишно, но в случая си ценя времето повече от това на Judge и се презастваховам, вместо да се чудя защо ми фейлва един от 10 теста :))

0
13/06/2017 14:11:04
dimitar90 avatar dimitar90 13 Точки

Много полезно.Благодаря

А къде мога да прочета за подобни сведения от сорта на това,че като викам .length си коства време :)

1
MartinBG avatar MartinBG 4803 Точки

Като човек, имащ някакъв опит с други езици за програмиране (напр. C++/C, при които лесно може да се намерят "тесните места" в програмите), преживявам голям "културен шок" от сблъсъка си със C# заради performance и memory usage спецификите (бих използвал думата проблеми, но това ще е пресилено), върху които все още имам много малък контрол чрез кода. Visual Studio и Resharper се състезават да ми предлагат "оптимизации" на кода, който съм написал и почти винаги предложеното от тях е по-четимо, кратко и "приятно за окото", докато не дойде време за изпълнение на програмата или пускане в Judge, и се види колко много памет и/или време използва (сравнено отново с "другите" езици). smiley

 

Ето няколко по-кратки страници със съвети по темата:

7 Ways To Optimize C# Code

Effective C# - Performance notes

Performance Tips and Tricks in .NET Applications

C# performance tips & tricks

5 Tips to Improve Performance of C# Code

StringBuilder and String Concatenation

14 C# Tips that improve code efficiency and productivity

 

Много от нещата в горните линкове се повтарят, но са едно добро начало.

 

Тук има структурирани съвети с препратки към по-подробни описания и тестове - като цяло доста добра страница:

https://www.dotnetperls.com/optimization

 

Да не забравяме и Google  - най-добрият приятел на всеки програмист! smiley

 

Успех!

0
14/06/2017 15:56:49
DimoYordanov avatar DimoYordanov 2 Точки

Здравейте,

имам проблем с първия тест, останалите минават!

това ми е кода:  https://pastebin.com/RzpzVNJb

0
Edwardcho avatar Edwardcho 5 Точки

Колега, малко късно, но все пак  ето едно много интересно и по-кратко решение :)

https://pastebin.com/BD8PdcLV

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.