Loading...
Abraxas avatar Abraxas 47 Точки

Ето моето на C#. Много съм доволен от дървото си, макар да не успях да го направя балансирано.
 

Edit: Оправих проблема с уникалните елементи.
https://github.com/TheAbraxas98/DictionariesTablesSetsHomework

ПС: Още веднъж благодаря на dim4o за забележката.

4
04/08/2015 19:31:04
dim4o avatar dim4o 288 Точки

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

2
Abraxas avatar Abraxas 47 Точки

По дефиниция, BST е дърво, чиито ноудове съхраняват отляво децата със стойности, които са по-малки или равни на тях, а отдясно - по-големи от тях. Поне аз така прочетох в презентацията от лекцията за дървета. Мога да греша, но реших да следвам тази дефиниция.

0
Abraxas avatar Abraxas 47 Точки

Обаче то е Set, чак сега обърнах внимание. Прав си колега! Благодаря за забележката. Ще го оправя!

0
dim4o avatar dim4o 288 Точки

Ето и моите решения -> HashTables. И аз не съм направил балансирането, защото имах по-малко от ден. Ще се радвам ако забележите бъгове, защото каквото оправя до края на деня - това ще предам.

0
Hristo_Penchev avatar Hristo_Penchev 389 Точки

Аз не разбрах много каква е идеята на първа задача, след като я правихме в клас. Мисля да ползвам написаното на лаба, понеже реално не виждам никаква разлика.

1
dim4o avatar dim4o 288 Точки
Мисля, че точно това е идеята. Да направиш лаба и да го ползваш в следващите задачи. Другия вариант е да си построиш таблица от нулата, което ще е по-полезно, защото в лаба таблицата е на 90% направена и не е оставено място за много мисъл. Аз избрах първия вариант, защото нямах време, но при първия удобен случай смятам да напрая една таблица от нулата.
0
krach avatar krach 65 Точки

Ето и моето домашно на JAVA https://github.com/krachunov/classWork6/tree/master/HomeWork6/src

Мисля, че не съм се справил съвсем коректно с частта при добавяне на елементи и съответното им разпределяне към ляво или дясно дете. В момента работи но ако подам различни от Integer стойности ще имам проблем понеже съм ги каствал. Другото което е итератора не съм сигурен дали правилно съм го реализирал.

Втората задача съм я реализирал с първата задача.

ivailozd Много ми помогна със статията която пусна за триенето на елемент с 2 деца. Благодаря много

1
06/08/2015 17:27:36
Dimitar.Stoyanov avatar Dimitar.Stoyanov 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 - Домашното с моята имплементация на бинарните дървета, вярвам че доста добре се получи отворен съм за коментари на това как да се подобри.

0
dobribozhilov avatar dobribozhilov -11 Точки

Този курс няма абсолютно никакъв смисъл от практическа гледна точка. Всички тези неща ги има готови и разработени от големи професионалисти, оптимизирани във всяко едно отношение. Ползват се на готово. Този курс по същество е някакъв вид академично занимание, което е по-скоро математика и логика, отколкото прогамиране. Аз лично участвам, защото ми доставя удоволствие да решавам подобни задачи, а не защото има някакъв смисъл. Дори, бих казал, че решавам задачите не по най-добрия начин, просто защото не съм чак толкова напреднал в C# и не знам всички възможности на езика. Така някой път се получава доста обемен и изумяващ код, просто защото не съм знаел за някоя по-проста готова функция. Но логически и математически, задачите са решени и е приятно да се случи. За съжаление не ми стига времето и понякога решавам само най-сложната задача.

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

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

-1
08/08/2015 19:01:57
HPetrov avatar HPetrov 822 Точки

@dobribozhilov
Ако ще се водим на принципа "някой вече го е измислил/написал" давай да ходим на нивата да берем домати и краставици. Това, че вече има нещо под някаква форма не значи, че е то е толкова перфектно и несравнимо. Не се знае дали утре няма ти да измислиш нещо много по-добро от това, което вече го има. А в рамките на този курс ако мисли някой, че не е важно как работят структурите и алгоритмите от зад, какъв performance имат и прочие съвсем учтиво им предлавам да отиват да правят сайтове (с извинение). За да работиш с нещо наистина не ти е нужно да знаеш всичко как работи отзад, но за да работиш ефективно и на много високо ниво вече трябва да знаеш всичко, което е под капака. Колкото повече знаеш, толкова по-добър си ;)

0
dobribozhilov avatar dobribozhilov -11 Точки

Всяко трупане на познание е полезно. Аз за разнообразие си чета Теорията на относителността. Въпросът е за връзката между познанието и наличните работни места.

0
mihayloff14 avatar mihayloff14 824 Точки

Ето и моето домашно:

https://github.com/mihayloff/Software-University-Courses/tree/master/Specialised%20Courses/Data%20Structures/06.Dictionaries-and-Hash-Tables

Доколкото успях да тествам отгоре-отгоре, мисля че съм се справил с 4та и 5та задача. Въпреки това, мисля да направя и един Unit Tests проект, за да тествам структурата, тъй като доста главоблъсканици имах с нея и не мога да гарантирам, че работи коректно.

0
dobribozhilov avatar dobribozhilov -11 Точки

За 4 задача се чудя по кой показател следва да се сравняват елементите на  set-а, в случай, че не са int или string. Изискването е класът да е generic, т.е. реално вътре в множеството следва да може да се поставят всякакъв тип данни - например дефиниран от мен клас Dobri с 10 различни променливи в него. По кой показател ще се сравнява, за да се реди дървото. Аз лично "забих" на този въпрос. С int както е примерът, е лесно, но как се сравняват другите?

0
dim4o avatar dim4o 288 Точки
Например: пренаписваш си метода CompareTo() от IComparable за обекта, който искаш да сравняваш. Иначе няма как да сравняваш обекти. Прегледай някой от курсовете по ООП. Там е обяснена много подробно идеята.
1
dobribozhilov avatar dobribozhilov -11 Точки

Това означава да се прави избор по някакъв показател, и подреждането да е по него. Може би не е съвсем коректно тогава заданието, защото фактически "сортед" за по-сложни типове е невъзможно. Би следвало заданието да е само за простите типове, защото в крайна сметка пак някакви прости типове ще сортираш - но като елементи на някакъв клас.

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

0
krach avatar krach 65 Точки

Колегата dim4o ти е отговорил как може да сравняваш обекти от твой си тип, както си посочил примерно обект от тип Dobri. А пък това дали твоя клас има 1 или 10 или 100 променливи не би трябало да има значение. В крайна сметка след като си е твой клас би трябвало ти да знаеш по коя променлива ще ги сравняваш и ще пренапишеш CompareTo() метода.

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