Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2010, 14:02   #1
Peek-a-boo
 
Регистрация: 31.10.2010
Сообщений: 5
По умолчанию Бинарный поиск (Pascal)

Моделирование работы планировщика потоков ОС.
Есть два массива - отсортированный по возрастанию массив с потоками (время, которое нужно программе на выполнение) и массив с ресурсами центрального процессора.
Программа должна расположить потоки из первого массива в порядке их обработки центральным процессором (Алгоритм выбора очередного потока на исполнение состоит в выборе потока, который имеет максимально близкое время работы к выделенному кванту времени). На выходе программы получается последовательность, которая задаёт порядок выполнения потоков центральным процессором.


Вся сложность в том, что поиск наиболее подходящего потока должен быть осуществлен способом под названием "Бинарный поиск". Пожалуйста, помогите.
Peek-a-boo вне форума Ответить с цитированием
Старый 31.10.2010, 15:01   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

почитай википедию, там толково написано про такой поиск

смотри, например, у нас имеется некая последовательность объектов (в нашем случае тип int)
Код:
1 5 6 0 9 12 -4 11 -7
нужно найти число F = 0

из этой последовательности нужно найти элемент (т.е. возвратить на него указатель допустим)

сначало нам нужно отсортировать этот массив
получим
Код:
-7 -4 0 1 5 6 9 11 12
теперь можно воспользоваться бинарным поиском
получаем длинну массива N
возьмем элемент в центре массива, т.е. c = (N % 2) = 8 % 2 = 4
сравним с икомым F
т.е. элемент массива под индексом 4 это число 5

а т.к. искомое число 0 и оно меньше 5, то ищем теперь в левой половине массива, т.е. среди элементов от нулевого индекса до 4-го
и так каждый раз обратно берем элемент из центра и сравниваем, если искомое больше чем в центре, то ищем правее, и наоборот


надеюсь понятно :DDD
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 01.11.2010, 09:30   #3
Peek-a-boo
 
Регистрация: 31.10.2010
Сообщений: 5
По умолчанию

Да это то я конечно знаю. Дело в том, что нужно всегда выбирать наибольший из подходящих, к тому же, два раза один и тот же поток выбирать , естественно, нельзя. Конечно, можно запилить проверку, которая распознает, брали ли мы этот поток или нет, но тогда вся эффективность бинарного поиска (а именно - время его выполнения) сойдет на нет, разве не так?
Peek-a-boo вне форума Ответить с цитированием
Старый 01.11.2010, 13:32   #4
pray_driver
Форумчанин
 
Аватар для pray_driver
 
Регистрация: 18.08.2010
Сообщений: 140
По умолчанию

RUSt88, да это вроде метод деления отрезка пополам
Люди бывают десяти типов: те, кто знают двоичную систему, и те, кто нет
pray_driver вне форума Ответить с цитированием
Старый 02.11.2010, 14:48   #5
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

Цитата:
метод деления отрезка пополам
да? а пруф можно на бинарный поиск и на метод деления отрезка пополам?

или вы шутите?
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарный поиск в массиве Driver_09 Помощь студентам 8 28.05.2010 15:53
Бинарный поиск CraZZZy-GameRRR Общие вопросы Delphi 8 25.05.2010 14:57
Бинарный поиск 0IceCube0 Паскаль, Turbo Pascal, PascalABC.NET 1 13.04.2010 15:52
Бинарный поиск Gendalf Помощь студентам 1 07.07.2007 22:09