Loading...
SvilenPavlov avatar SvilenPavlov 11 Точки

Programming Fundamentals - Text Processing Exercises Problem 5. Character Multiplier

Здравейте, другари!

 

Имам въпрос относно този код - https://pastebin.com/dfAsqzm6

Закоментираната версия е с резултат 80/100 лимит време- 0.316 s, Памет - 12.19 MB 

докато тази, която си върви е 100/100 -  0.078 s, Памет - 10.50МВ

В единия случай имаме 4х по-дълго време и 20% повече памет.
По моята логика не би следвало да има чак такава разлика защото:

Бавния вариянт върти до по-големия лент (примерно 500)

Бързия вариянт върти до по-малкия лент (примерно 20), и после пак минава останалите цикли до големия лент (прим. от 20 до 500 =480 пъти.)
Т.е общо пак имаме 500 цикъла. Защо е толкова голяма разликата във времето??

Тагове:
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки
  1. StringBuilder first = new StringBuilder(input[0]);

  2.             StringBuilder second= new StringBuilder(input[1]);

  3.             StringBuilder leftover = new StringBuilder();

това е абсолютно излишно ти си имаш стрингове зашо презаписваш стринг в stringbuilder само ти си знаеш.

второ има доста голяма разлика първия вариант които си закоментирал и дава грешка с паметта върти целия стринг и имаш 4 проверки.

а втория варинт които ти минава е с пъти по бърз защото извършваш операциите върху части от стринга.

Сега ако тръгна да ти обеснявам точно защо е разликата може би ще те объркам но това е заради начина по които работи компилатора и тн ако те интересува прочети малко за stack и heap. Общо взето е свързано с това как се пазят променливите къде и как се достъпват и тн. теоритично и 2ата варианта са правилни но при поставените ти условия оптимизирания вариант е правилен. Сещам се по няколко начина как да го обесня но все става сложно,това са малко по адвансед конценпций и макар да ги разбирам ми е трудно още да ги обеснявам на ниско ниво. 

0
kolioi avatar kolioi 641 Точки

При мен и двата варианта минават със 100/100, Memory: 8.56 MB, Time: 0.046 s

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