1 / 1 / 0
Регистрация: 10.03.2011
Сообщений: 39
|
||||||
1 | ||||||
Двоичный поиск07.04.2011, 10:17. Показов 4218. Ответов 22
Метки нет (Все метки)
Требуется найти в массиве элементы которые повторяются и элементы которые присутствуют единожды.
0
|
07.04.2011, 10:17 | |
Ответы с готовыми решениями:
22
Двоичный поиск Двоичный поиск двоичный поиск Двоичный поиск |
1 / 1 / 0
Регистрация: 10.03.2011
Сообщений: 39
|
|
07.04.2011, 10:28 [ТС] | 3 |
0
|
07.04.2011, 10:32 | 4 |
Это же бред, бинарный поиск используется для поиска конкретного элемента, с целью сократить время поиска, чтобы оно было меньше линейного. А в этой задаче все равно придется просматривать весь массив и бинарный поиск здесь ни к чему. Вот только если конечно, я как-то неправильно понял задание и надо узнать, повторяется ли то число, которое ищется, а не вообще все числа.
0
|
1 / 1 / 0
Регистрация: 10.03.2011
Сообщений: 39
|
|
07.04.2011, 10:42 [ТС] | 5 |
Да сам толком не понял Наверное надо создать ещё один массив, в котором будут елементы, что используются только один раз.
0
|
1 / 1 / 0
Регистрация: 10.03.2011
Сообщений: 39
|
|
11.04.2011, 10:23 [ТС] | 6 |
Помогите плз сделать до четверга.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
11.04.2011, 10:31 | 7 |
До какого именно? До 14/04/2011, 21/04/2011, 28/04/2011, 4/05/2011, 11/05/2011, 18/05/2011, или 25/05/2011? Или ещё до какого нибудь?
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
11.04.2011, 10:35 | 9 |
Кстати, бинарный поиск используется в деревьях, в крайнем случае в корягах, но ни как не в массивах.
0
|
11.04.2011, 14:25 | 10 |
Если массив отсортирован, то почему нет? Очень даже используется. Можно взглянуть хотя бы на это - /binary_search/.
Мы не можем тебе помочь. Почему? Я это описывал уже выше - задание бредовое. А за прошедшее время ты мог бы его уточнить кстати.
0
|
1 / 1 / 0
Регистрация: 10.03.2011
Сообщений: 39
|
|
12.04.2011, 12:09 [ТС] | 11 |
Да этих преподов фиг поймеш, переспросил, условие такое: Дан массив А, отсортировать его по убыванию, найти элементы которые встречаются единожды и перенести их в массив В.
Извиняюсь за неудобства) П.С. До четверга 14.04.2011
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
12.04.2011, 12:42 | 12 |
Потому, что в массиве, даже отсортированном, на сколько после сравнения отступить от текущего элмента, чтоб получился бинарынй поиск. Сравнил ты с первым элементом, он оказался меньше, переходишь ко второму и считаешь поиск бинарным? Придётся тебя разочаровать, но это последовательный поиск.
0
|
12.04.2011, 16:04 | 13 |
Либо мы не понимаем друг друга, либо Вы не понимаете сути бинарного поиска. Если массив отсортирован, то для поиска элемента "отступать" необходимо ровно на половину текущего интервала поиска. В итоге сложность получится в лучшем случае O(logn). В худшем случае O(n). Это касается и двоичных деревьев поиска тоже. Именно двоичных, к которым не применяются алгоритмы балансировки. Видели когда-нибудь такое дерево?
Сколько потребуется итераций, чтобы найти лист дерева? Правильно - O(n). Судя по Вашей логике, здесь тоже будет последовательный поиск. В бинарных деревьях поиска сложность абсолютно такая же: O(logn) - в лучшем случае и O(n) - в худшем. Если речь идет о касательно конкретно этой задачи, то я и не говорил, что бинарный поиск (или метод деления пополам) здесь должен быть, я говорил, что задание "бредовое". То есть в этой задаче никакого бинарного поиска и не будет - будет просто отсортированный массив. Здесь как такового поиска не будет вообще
0
|
12.04.2011, 16:31 | 16 | |||||
Примерное решение задачи (не проверял):
1
|
33 / 33 / 7
Регистрация: 09.04.2011
Сообщений: 119
|
|
13.04.2011, 04:13 | 17 |
fasked, а не подскажете для общего развития (мы C/C++ изучали аж в конце 2009-ого, так что уже многое забылось), почему comparator реализован именно так? Через адреса? То есть как я понял передаются указатели на переменные, потом происходит разыменование (что логично), потом зачем-то опять... В общем я слегка запутался О_о
0
|
13.04.2011, 21:22 | 18 |
Через указатели, потому что, если выполнять сортировку структур, то передавать по значению будет слишком накладно представьте себе структуру размером сто байт или больше, указатель же всегда 4 или 8 байт.
Сначала приведение типа к указателю на int (чтобы можно было сравнить), потом разыменование.
0
|
33 / 33 / 7
Регистрация: 09.04.2011
Сообщений: 119
|
|
13.04.2011, 21:36 | 19 |
Так если у Вас будет передаваться указатель на структуру, Вы приводите его к типу (int*), разыменовываете и делаете вычитание, то что получится в итоге? Вычитать можно вроде бы только целые, но что реально будет вычитаться в случае структуры в качестве аргумента?
Принцип возвращаемого значения вполне понятен (отрицательное, в случае если первый аргумент больше, ноль если равны, иначе положительное), но насчёт вычитания пока не понял...
0
|
13.04.2011, 21:43 | 20 | |||||
Компаратор "подгоняется" под конкретный тип данных и конкретный случай вообще, тот что выше сделан для int и сортировки по убыванию. Если делать компаратор для структур, то и приводить тип, само собой, надо будет к типу этой структуры.
Если принцип возвращаемого значения понятен, то тогда с вычитанием все совсем просто. Есть два числа x и y. Если x < y, то x - y < 0. Если x > y, то x - y > 0, если x == y, то x - y == 0. Унарный минус для всего выражения изменяют ситуацию на прямо противоположную. Если x < y, то -(x - y) > 0. Если x > y, то -(x - y) < 0, если x == y, то -(x - y) == 0. Что и делает компаратор пригодным для сортировки по убыванию, а не по возрастанию. Здесь применяется банальнейшая арифметика. Как я уже говорил компаратор подстраивается под конкретный случай, для целых чисел это (на мой взгляд) одна из наиболее коротких записей. В общем виде тело функции-компаратора выглядело бы так:
0
|
13.04.2011, 21:43 | |
13.04.2011, 21:43 | |
Помогаю со студенческими работами здесь
20
Двоичный поиск двоичный поиск Двоичный (бинарный) поиск Нерекурсивный двоичный поиск Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |