Loading...
Hristo_Penchev avatar Hristo_Penchev 389 Точки

Magic Strings Time Out

Здравейте колеги,

 

Пускам за тестове задачата Magic Strings на C# и се дъня с времето. От 16 теста 13 ми излизът извън времевия лимит. Четох във форума, че е имало проблем с тайминга при джава и допускам, че може да съществува същия и при С#. Или пък моето решение да е прекалено тежко.

 

Тук можете да го погледнете:
http://pastebin.com/sCnvmfi3

Ползвам осем цикъл с по четири елемента един в друг. Това предполага над 1000 комбинации, не знам това много ли е. За проверките използвам два временни масива и лист от стрингове, който после сортирам. Но доколкото знам тези елементи не са натоварващи. Необходимо ли е да оптимизирам програмата си и как може да стане?

 

Тагове:
-1
Programming Basics
Hristo_Penchev avatar Hristo_Penchev 389 Точки

След многобройни тестове в Judge системата открих къде е проблемът. Всъщност осемте цикъла отнемат съвсем малко време. Това, което дъни работата е:

 

 for (byte j = 0; j < sequences.Count; j++) Console.WriteLine(sequences[j]);

Листът sequences е съставен от стрингове. Явно обхождането на лист с референтни типове е доста бавно. Затова предприех друг подход. Махнах листа и заложих азбучната подредба в самите цикли. Това стана много лесно - в началния съхраняващ масив размених местата на цифрите и вместо първоначалното {3, 4, 1, 5} го направих { 1, 4, 5, 3} Така програмата цикли през "теглото" на буквите в азбучен ред и като засече комбинация, която да отговаря на условието, просто я печата, без да товари паметта. Лесно се добавя един булев израз, който да засече дали има изобщо намерени такива числа и ако няма, да връща "No". Тук можете да видите ъпдейтнатия код:

http://pastebin.com/MjZyNBfv

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