[HomeWork] Структури от данни - Dictionaries, Hash Tables and Sets
Моето домашно на Java: ТУК
Ще съм благодарен за коментари или въпроси.
Моето домашно на Java: ТУК
Ще съм благодарен за коментари или въпроси.
Ето моето на C#. Много съм доволен от дървото си, макар да не успях да го направя балансирано.
Edit: Оправих проблема с уникалните елементи.
https://github.com/TheAbraxas98/DictionariesTablesSetsHomework
ПС: Още веднъж благодаря на dim4o за забележката.
Ето и моите решения -> HashTables. И аз не съм направил балансирането, защото имах по-малко от ден. Ще се радвам ако забележите бъгове, защото каквото оправя до края на деня - това ще предам.
Аз не разбрах много каква е идеята на първа задача, след като я правихме в клас. Мисля да ползвам написаното на лаба, понеже реално не виждам никаква разлика.
Ето и моето домашно на JAVA https://github.com/krachunov/classWork6/tree/master/HomeWork6/src
Мисля, че не съм се справил съвсем коректно с частта при добавяне на елементи и съответното им разпределяне към ляво или дясно дете. В момента работи но ако подам различни от Integer стойности ще имам проблем понеже съм ги каствал. Другото което е итератора не съм сигурен дали правилно съм го реализирал.
Втората задача съм я реализирал с първата задача.
ivailozd Много ми помогна със статията която пусна за триенето на елемент с 2 деца. Благодаря много
Здравейте това е моето домашно на C# досега това съм написал доста се помъчих с този OrderedSet на 4-та задата.
Скоро ще е решена на линка на github-a ми. Интересното е че дървета а и другите структори от данни ги има в MSDN като готов код и може да се видят. Реално на практика в живота няма да ни се налага да имплементираме структури от данни освен ако не работим с език които не ги е имплементирал. Идеята е да разберем как работят различните видове структури от данни от всички тези домашни и да развиен алгуритмично мислене.
https://msdn.microsoft.com/en-us/library/ms379572(v=vs.80).aspx това е линк на бинарни дървета в MSDN
https://github.com/DimitarStoyanovVictory/Data-Structures/tree/master/Data-Structures-Homework06-DictionariesHashTablesSets - Домашното с моята имплементация на бинарните дървета, вярвам че доста добре се получи отворен съм за коментари на това как да се подобри.
Този курс няма абсолютно никакъв смисъл от практическа гледна точка. Всички тези неща ги има готови и разработени от големи професионалисти, оптимизирани във всяко едно отношение. Ползват се на готово. Този курс по същество е някакъв вид академично занимание, което е по-скоро математика и логика, отколкото прогамиране. Аз лично участвам, защото ми доставя удоволствие да решавам подобни задачи, а не защото има някакъв смисъл. Дори, бих казал, че решавам задачите не по най-добрия начин, просто защото не съм чак толкова напреднал в C# и не знам всички възможности на езика. Така някой път се получава доста обемен и изумяващ код, просто защото не съм знаел за някоя по-проста готова функция. Но логически и математически, задачите са решени и е приятно да се случи. За съжаление не ми стига времето и понякога решавам само най-сложната задача.
Принципно, дори да станеш цар на структурите от данни и на алгоритмите, и да си по-добър от гурутата в Майкрософт, които пишат готовите за нас класове, дори да е така, това има малка практическа стойност, защото самите готови класове са достатъчно добри и дори някой дето не разбира нищо от това как са изградени, може да ги ползва.
Вероятно подобен курс има смисъл за някакъв вид научна дейност - развитие на програмирането и създаване на нови концепции. За тази цел е важно този тип мислене, което се тренира със сложни по същността си задачи.
@dobribozhilov
Ако ще се водим на принципа "някой вече го е измислил/написал" давай да ходим на нивата да берем домати и краставици. Това, че вече има нещо под някаква форма не значи, че е то е толкова перфектно и несравнимо. Не се знае дали утре няма ти да измислиш нещо много по-добро от това, което вече го има. А в рамките на този курс ако мисли някой, че не е важно как работят структурите и алгоритмите от зад, какъв performance имат и прочие съвсем учтиво им предлавам да отиват да правят сайтове (с извинение). За да работиш с нещо наистина не ти е нужно да знаеш всичко как работи отзад, но за да работиш ефективно и на много високо ниво вече трябва да знаеш всичко, което е под капака. Колкото повече знаеш, толкова по-добър си ;)
Всяко трупане на познание е полезно. Аз за разнообразие си чета Теорията на относителността. Въпросът е за връзката между познанието и наличните работни места.
Ето и моето домашно:
Доколкото успях да тествам отгоре-отгоре, мисля че съм се справил с 4та и 5та задача. Въпреки това, мисля да направя и един Unit Tests проект, за да тествам структурата, тъй като доста главоблъсканици имах с нея и не мога да гарантирам, че работи коректно.
За 4 задача се чудя по кой показател следва да се сравняват елементите на set-а, в случай, че не са int или string. Изискването е класът да е generic, т.е. реално вътре в множеството следва да може да се поставят всякакъв тип данни - например дефиниран от мен клас Dobri с 10 различни променливи в него. По кой показател ще се сравнява, за да се реди дървото. Аз лично "забих" на този въпрос. С int както е примерът, е лесно, но как се сравняват другите?
Това означава да се прави избор по някакъв показател, и подреждането да е по него. Може би не е съвсем коректно тогава заданието, защото фактически "сортед" за по-сложни типове е невъзможно. Би следвало заданието да е само за простите типове, защото в крайна сметка пак някакви прости типове ще сортираш - но като елементи на някакъв клас.
Аз мислех възможно ли е да се направи някакъв универсален механизъм, който привежда всички обекти към една и съща мерна единица, някакъв вид всеобща конверсия към общ измерител, и с нея... Предполагам, че не е възможно.
Колегата dim4o ти е отговорил как може да сравняваш обекти от твой си тип, както си посочил примерно обект от тип Dobri. А пък това дали твоя клас има 1 или 10 или 100 променливи не би трябало да има значение. В крайна сметка след като си е твой клас би трябвало ти да знаеш по коя променлива ще ги сравняваш и ще пренапишеш CompareTo() метода.
По идея такива множества би трябвало да държат само уникални елементи - така се иска и по условие, но при теб има възможност да добавиш елемент, който вече съществува. Според мен трябвва да го оправиш това.
По дефиниция, BST е дърво, чиито ноудове съхраняват отляво децата със стойности, които са по-малки или равни на тях, а отдясно - по-големи от тях. Поне аз така прочетох в презентацията от лекцията за дървета. Мога да греша, но реших да следвам тази дефиниция.
Обаче то е Set, чак сега обърнах внимание. Прав си колега! Благодаря за забележката. Ще го оправя!