[DSA] Trees and Traversals Homework


5

Измислих решение на цялата първа задача със звездичките включително. Мисля, че работи коректно, но не знам дали няма и по-добро решение. Чакам да видя :)




Отговори



1

Ето и моите дървета и храсти :)

Само на последната задача не успях да разбера как мога да си изчисля размера на файловете в рекурсивното DFS при положение, че дървото не е двуично и има цикъл, затова трябваше да подавам референция или статична променлива.


от sa66eto (1945 точки)


0

Здравей,

Можеш да използваш класа FileInfo, където имаш пропърти Length, което ти дава размера на файла (long) и при всяко обхождане на файл да го прибавиш към общата сума. Ето примерен код:

FileInfo[] files = dirInfo.GetFiles(); foreach (var file in files) { var newFile = new File { Name = file.Name, Size = file.Length }; sum += file.Length; folder.Files.Add(newFile); }


от TeeeeeC (272 точки)

0
Аз точно това правя, само че идеята не е да се изчислява докато се дърпат файловете, ами първо да се построи дърво и след това да се изчисли с DFS както може да видиш при мен. Иначе да и аз ползвам класа FileInfo :)

от sa66eto (1945 точки)



0
Интересно домашно беше :).... Link

от ivo.rankov.7 (226 точки)


0
Пускам и моето домашно. Ако има някакви грешки, споделяйте :)

от TeeeeeC (272 точки)


0
Не ти е нужен BigInt за 3-та задача. Сумата се побира в long(9,223,372,036,854,775,807 е макс, което е дооооста памент :D).

от ivo.rankov.7 (226 точки)

0
Реших да се подсигуря :D, накрая видях, че найстила Long ще свърши работа.

от TeeeeeC (272 точки)


1

Ето ги и моите решения -  here.

Задачата за намиране на сума от поддърво съм решил като разглеждам всеки възел като корен на отделно дърво. Решенито работи, но при голямо дърво ще е доста бавно, така че ако някой има по-добри идеи, ще се радвам да ги сподели :)


от antoanelenkov (1047 точки)


2

Екстра е. Тук на 96, 97-ми ред:

var currentSum = 0;
currentValues.ToList().ForEach(x => currentSum += x); 

може да го замениш с: 

var currentSum = this.currentValues.Sum();


от deyan.todorov (1019 точки)


0
Ето и моите варианти GIT.

от vladko_sz (195 точки)


1
Още малко дървета, докато тествах разбрах, че триенето на 20 хиляди папки и още около 50 хиляди файла с общ размер 0 байта струва на windows-а около 2 мин. Докато триенето на 5 файла (10GB) става мигновено. Не знам дали е от самия windows или Hdd. Дали при SSD ще е същото?

от M.Yankov (1418 точки)


0

Windows в действителност не изтрива файловете (дори и с Shift + Del), а ги маркира като изтрити, след което когато създавш нови файлове информацията се презаписва върху старите. До преди този момент информацията може да се възстанови, след това могат да се възстановят части които не са презаписани. За сигурно изтриване или формат, или има програми които записват random информация, на мястото на изтритите файлове.

И за това "изтирването" на на 50 хиляди е бавно - докато отбележи всеки, а на 5 е бързо. Размерър няма значени :)


от kidroca (1498 точки)


0
Не съм сигурен дали масив от TreeNode се брои за дърво щото нали идеята е да вкараме алгоритъм за обхождане и има значение децата дали са отляво или отдясно ама .. и аз така го направих. :D

от AndreyMitev93 (146 точки)


0
Ето и от мен. ЦЪК

от nikolaider (230 точки)


0
Бая се измъчих с цепенето на дърва и ето го резултата. Не съм убеден, че последната ми задача е на 100% вярна, но поне си бачка.

от ykomitov (584 точки)


2
Ето ги ТУК и моите дръвчета :)

от dentia (12519 точки)