Loading...
Losko avatar Losko 69 Точки

Array VS List. Колко по-бавни са листовете ?

Опитах се да реша задача [Exercises: Arrays and Lists]10. Pairs by Difference. Като използвам Лист, но получих грешка "Лимит време".
Memory: 10.12 MB 
Time: 0.406 s
На лекцията за масиви и листове когато попитаха лектора, "Защо след като листовете са по-добри не ползваме само тях." той одговори,
че били по-бавни и ако не ни трябва тяхната функционалност, по-добре да си ползваме масиви... Така и направих и всичко мина ок.
Memory: 9.25 MB 
Time: 0.265 s.
Във варианта с масиви в отделен метод си правя масива... тествах ако не ползвам метод и там времето се качи леко.
Memory: 9.26 MB 
Time: 0.281 s
Ще оставя линк кум кода като коментирания код е решението с лист. 
Ако може някой да каже защо работи почти два пъти по бавно, както и защо метода също оказва влиание след като кода в нго и без него е 100% един и същ ?
http://pastebin.com/Fmsmuizv

Тагове:
0
Programming Fundamentals
msmilkoff avatar msmilkoff 338 Точки

Не са бавни, зависи за каква операция говорим. Листът отдолу е просто масив, който се оразмерява, когато се препълни. Например, Add е бърза операция освен в редките случаи на оразмеряване, а Contains е бавна, защото обикаля по всички елементи. На теб май ти се бави, защото правиш два листа и добавяш елементи два пъти, което подсказва че имаме потенциално две оразмерявания минимум, което ти забавя алгоритъма. Вместо да четеш числата като стринг и да ги добавяш в лист, след което да създаваш нов лист и да прехвърляш данните, ползвай:
var nums = Console.ReadLine().Split().Select(int.Parse).ToList(); и виж дали пак ще ти даде лимит време.

0
Losko avatar Losko 69 Точки

Ок, По този начин се вписах в условието, но пак е доста по бавно.
"List<int> nums = Console.ReadLine().Split().Select(int.Parse).ToList();"

А този "Select(int.Parse)" От къде идва ... Мисля, че разбирам какво прави, но до лекцията за Масиви и Листове не съм го срещал.

Memory: 10.20 MB 
Time: 0.390 s
0
msmilkoff avatar msmilkoff 338 Точки

Идва от System.Linq. Общо взето проектира всеки елемент от колекцията в нова форма. В случая го парсва към int, но може и ламбда изрази да му подаваш, примерно да  добавя едно към всяко число - Select(n=> n +1). Ще го учите. Засега си го ползвай за парсване, освен ако не искаш да напредеш малко повече от колегите си и да им показваш "фокуси" с LINQ :)))

2
Losko avatar Losko 69 Точки

Сега ако кажеш защо и с Метод работи малко-по бързо ... :)

 

0
msmilkoff avatar msmilkoff 338 Точки

Това няма логика. Просто Judge дава малко различни резултати всеки път. На мен много пъти ми е давало Time Limit, но като го постна пак - минава. Ако искаш по-точен тайминг, виж как работи Stopwatch класа и си измери вариантите ръчно.

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