Трудности циклов
Трудности циклов
Возможность повторять некоторые вычисления произвольное число раз, не поддаваясь усталости, без случайных потерь чего-либо важного, - в этом принципиальное отличие компьютерных вычислений от возможностей человека. Вот почему циклы так важны. Трудно вообразить, что можно было бы делать в языках, в которых были бы только две управляющие структуры - последовательность и выбор, - но не было бы циклов и не было бы поддержки рекурсии, еще одного базисного механизма поддержки итеративных вычислений.
Но с мощностью приходят и риски. У циклов дурная слава, - их трудно заставить работать правильно. Типичными для циклов являются:
[x]. Ошибки "больше-меньше" (выполнение цикла слишком много или слишком мало раз).
[x]. Ошибки управления пограничными ситуациями, например пустыми структурами. Цикл может правильно работать на больших массивах, но давать ошибки, когда у массива один элемент или он вообще пуст.
[x]. Ошибки завершения ("зацикливание") в некоторых ситуациях.
Бинарный поиск - один из ключевых элементов базового курса "Введение в информатику" (Computer Science 101) - хорошая иллюстрация "коварства" циклов даже в относительно тривиальной ситуации. Рассмотрим целочисленный, упорядоченный по возрастанию массив t с индексами от 1 до n. Используем алгоритм бинарного поиска для ответа на вопрос: появляется ли целое x среди элементов массива. Если массив пуст, ответ должен быть "нет", если в массиве ровно один элемент, то ответ "да" тогда и только тогда, когда элемент массива совпадает с x. Суть бинарного поиска, использующего упорядоченность массива, проста: вначале x сравнивается со средним элементом массива, если есть совпадение, то задача решена, если x меньше среднего элемента, то поиск продолжается в верхней половине массива, в противном случае - в нижней половине. Каждое сравнение уменьшает размер массива вдвое. Ниже представлены четыре попытки реализации этой простой идеи. К несчастью, все они содержат ошибки. Вам предоставляется случай поупражняться в поиске ошибок и установить, в какой ситуации каждый из алгоритмов не работает нужным образом.
BS1
from
i := 1; j := n
until i = j loop
m := (i + j) // 2
if t @ m <= x then
i := m
else
j := m
end
end
Result := (x = t @ i)
BS2
from
i := 1; j := n; found := false
until i = j and not found loop
m := (i + j) // 2
if t @ m < x then
i := m + 1
elseif t @ m = x then
found := true
else
j := m - 1
end
end
Result := found
BS3
from
i := 0; j := n
until i = j loop
m := (i + j + 1) // 2
if t @ m <= x then
i := m + 1
else
j := m
end
end
if i >= 1 and i <= n then
Result := (x = t @ i)
else
Result := false
end
BS4
from
i := 0; j := n + 1
until i = j loop
m := (i + j) // 2
if t @ m <= x then
i := m + 1
else
j := m
end
end
if i >= 1 and i <= n then
Result := (x = t @ i)
else
Result := false
end
Таблица 11.3.Четыре (ошибочных) попытки реализации бинарного поиска
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Операторы циклов
Операторы циклов Microsoft JScript поддерживает несколько типов циклов: цикл for, цикл for…in, цикл while, цикл do…while. Рассмотрим каждый из них
Операторы циклов
Операторы циклов В VBScript поддерживаются несколько типов циклов: цикл For…Next, цикл Do…Loop, цикл While…Wend, цикл For Each…Next. Рассмотрим каждый из них
Трудности управления
Трудности управления Как рассказывалось выше, национальными доменами разных государств управляют самые разные общественные, коммерческие, некоммерческие и государственные организации, а иногда и фактически частные лица. Впрочем, в большинстве случаев администраторы
Технические трудности
Технические трудности Введение многоязычных доменов связано с целым рядом технических трудностей. Основная из них состоит в том, что система DNS может работать только с символами из набора ASCII.Что такое ASCII? Это стандартный набор символов, включающий в том числе и буквы
Трудности переходного возраста
Трудности переходного возраста Давайте уж будем совсем откровенны и согласимся с тем, что мы не молодеем. Ну не можем мы вернуть себе былую молодость, как бы ни старались, ни прихорашивались, сколько бы тонн румян и белил на себя ни накладывали и сколько бы пластических
Кажущиеся трудности
Кажущиеся трудности Итак, список создан и замечательно работает. Возможно, в некоторых случаях, Вам захочется реализовать и более сложные
47. Оптимизация циклов
47. Оптимизация циклов Существует большое число методов оптимизации циклов с самыми экзотическими названиями: «разгрузка циклов», «вывод инвариантов за циклы», «устранение индуктивных переменных», «сращивание циклов», «разматывание циклов» и т. д. В действительности
Повторение с помощью циклов
Повторение с помощью циклов Управляющие структуры типа "цикл" используются тогда, когда необходимо повторить выполнение некоторого блока программного кода несколько раз. Повторение одного или нескольких операторов является главным средством выполнения многих
Повторение под управлением циклов For...Next
Повторение под управлением циклов For...Next Если уже перед выполнением цикла известно, сколько раз он должен выполняться, используйте цикл For. . . Next. Число проходов цикла задается значениями начало и коней, которые могут быть целыми числами, переменными и даже сложными
Досрочный выход из циклов
Досрочный выход из циклов Для досрочного выхода из циклов используются процедуры Break и Continue. Процедура Break прерывает цикл, а в результате вызова процедуры Continue пропускается блок кода, расположенный между ею и окончанием тела цикла, и выполняется следующая
5.4. Трудности с отсечением и отрицанием
5.4. Трудности с отсечением и отрицанием Используя отсечение, мы кое-что выиграли, но не совсем даром. Преимущества и недостатки применения отсечения были показаны на примерах из предыдущих разделов. Давайте подытожим сначала преимущества:(1) При помощи отсечения часто
18.5.9. Подсчет с помощью циклов
18.5.9. Подсчет с помощью циклов При обсуждении команды expr отмечалось, что эта команда применяется, если в циклы необходимо ввести счетчики. Ниже рассматривается пример, в котором цикл for обрабатывает файлы, а вывод и подсчет количества файлов осуществляется с помощью
ФМ-ВЕЩАНИЕ: Трудности перевода
ФМ-ВЕЩАНИЕ: Трудности перевода Только что вышел из двухнедельного цикла участия в конференциях и семинарах. На последнем из них, партнерском семинаре ABBYY, вустретилась забавная картина. Как обычно в турецких отелях по системе «все включено», мы питались за шведским
Трудности тайм-менеджмента
Трудности тайм-менеджмента Вот теперь можно начинать!Тайм-менеджмент труден для сисадминов в первую очередь потому, что нашу работу постоянно прерывают. Как довести дело до конца, если нам все время приходится бросать его, чтобы устранить проблему или ответить на вопрос,
Трудности разработки политики и регламента
Трудности разработки политики и регламента Среди разработчиков политики PKI редко встречаются подлинные специалисты, обладающие необходимым опытом и уровнем знаний. Большинство привлекаемых к этой работе бизнес-менеджеров оказываются недостаточно технически