Loading...
milena.sapunova avatar milena.sapunova 18 Точки

Java Collections [Homework] - Problem 11* Implement Recursive Binary Search

Здравейте,

Въпросът ми е за последния тест:

Търси се: 4
В поредицата: 4 4 4 4 4 8 8 8

Ако използвам Binary Search не трябва ли да ми върне 3, а не 0. Binary Search започва винаги в средата. В поредицита последния индекс ми е 7. Значи 7 / 2 = 3. След това проверявам дали третия елемент ми е 4 и Binary Search приключва, защото третия елемент е именно 4. Поне аз така разбирам условието:

"Basically, it goes to the middle element and checks it has to continue searching to the left, or to the right." 

1
Fundamentals Module
Ivanov.Ivan avatar Ivanov.Ivan Trainer 558 Точки

Здравей,

По принцип трябва да върне -1 ако го няма в колекцията или индекса, ако го има.

Приложи линк към кода ти за да го разгледаме.

0
milena.sapunova avatar milena.sapunova 18 Точки

Въпросът ми е, защо задачата при тази поредица и това търсено число кава, че Output-a e 0, а не 3. В смисъл 4 го има пет пъти в поредицата 4 4 4 4 4 8 8 8. Защо трябва да върне 0, а не индекса на числото в средата, при положение, че Binary Search според условието трябва да започва в среадата, което ще рече, че веднага намира числото 4:

"Basically, it goes to the middle element and checks it has to continue searching to the left, or to the right." - отивам в средата, намирам 4 и приключвам. Никъде не пише: you need to find the first instance of the number. 

0
29/03/2016 14:49:45
Ivanov.Ivan avatar Ivanov.Ivan Trainer 558 Точки

Извинявай не съм прочел внимателно въпроса.

Според мен е грешка в теста, няма как да върне 0 в този случай, според мен

1
milena.sapunova avatar milena.sapunova 18 Точки

И аз така си мисля...

0
Filkolev avatar Filkolev 4482 Точки

От примерите излиза, че трябва да се намери най-левият индекс, което обезсмисля алгоритъма. Едит: грешка, от индекс 3 започва търсенето. На предпоследния пример трябва резултатът да е 6, понеже се започва от индекс 4, след което следва 6, при което методът приключва и връща 6.

0
29/03/2016 15:55:33
RoYaL avatar RoYaL Trainer 6849 Точки

Не съм сигурен, че се обезсмисля алгоритъма, да намериш най-левия индекс. Трябва BinarySearch и IndexOf да са взаимозаменяеми. Т.е. ако масивът е подреден и смениш IndexOf с BinarySearch, не би трябвало да дава различни резултати.

Друг е въпросът, че в Java при масивите няма indexOf и съответно няма как някой да очаква двете да се подменят :) В C# масивите имат и двата метода и ако изтествате вградените методи ще видите че връщат едни и същи индекси.

0
29/03/2016 15:45:09
Filkolev avatar Filkolev 4482 Точки

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

Пример, имаме масив от 1 милион 4-ки, линейно търсене връща 0, бинарно то - 499999. И двата метода правят само една стъпка. Е, какъв е смисълът да насилваме бинарното да продължава да търси?

0
Ivanov.Ivan avatar Ivanov.Ivan Trainer 558 Точки

Ей сега си е.... мама. ...!

Напълно се обърках! В конкретната задача, алгоритъма който сме имплементирали повечето от нас ( някакво подобие на бинарно търсене ) изпълнява ли изискването на задачата или не?

0
RoYaL avatar RoYaL Trainer 6849 Точки

Фил, в Java масивите нямат indexOf, така че няма как да се сравняват нещата. Списъците имат, да. И да ако направиш индексОф на списък и байнъриСърч на масив излизат различни стойности.

В C# това не е така. Ако пуснеш

        static void Main(string[] args)
        {
            int[] arr = { 1, 2, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 7, 8, 9 };
            Console.WriteLine(Array.IndexOf(arr, 5));
            Console.WriteLine(Array.BinarySearch(arr, 5));
        }

Ще видиш, че дават еднакви стойности.

От гледна точка на дизайн и това да не се счупи работата на кода е много по-правилно двете функции да връщат еднакви стойности при сортиран масив.

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