Главная / Программирование /
Программирование / Тест 74
Программирование - тест 74
Упражнение 1:
Номер 1
В массиве, содержащем 1000 элементов,
выполняется последовательный поиск элемента x.
При этом x содержится
в массиве с вероятностью 0.25. Сколько в среднем операций сравнения
будет выполнено?
Ответ:
 (1)
625
 
 (2)
750
 
 (3)
875
 
 (4)
550
 
 (5)
900
 
Номер 2
В массиве, содержащем 1000 элементов,
выполняется последовательный поиск элемента x.
При этом x содержится
в массиве с вероятностью 0.75. Сколько в среднем операций сравнения
будет выполнено?
Ответ:
 (1)
625
 
 (2)
750
 
 (3)
875
 
 (4)
550
 
 (5)
900
 
Упражнение 2:
Номер 1
В массиве, содержащем 1000 элементов,
выполняется последовательный поиск элемента x.
При x содержится
в массиве с вероятностью равна 0.1.
Сколько в среднем операций сравнения
будет выполнено?
Ответ:
 (1)
550
 
 (2)
900
 
 (3)
950
 
 (4)
650
 
 (5)
600
 
Номер 2
Пусть дан массив a длины n,
элементы которого нестрого возрастают, т.е. соседние
элементы могут быть равными.
Рассмотрим фрагмент программы бинарного поиска
элемента x в массиве
a длины n, где
после отбрасывания особых ситуаций рассматривается
основной случай:
. . .
// Утверждение: a[0] < x && x <= a[n-1]
int beg = 0; int end = n-1;
while (end-beg > 1) {
// Инвариант: a[beg] < x && x <= a[end]
int c = (beg + end) / 2;
if (a[c] < x) {
beg = c;
} else {
end = c;
}
}
*idx = end;
. . .
Пусть значение x содержится в массиве
в нескольких экземплярах. Индекс какого элемента
массива a будет записан в переменную *idx?
Ответ:
 (1)
Индекс первого элемента, равного
x.
 
 (2)
Индекс поcледнего элемента, равного
x.
 
 (3)
Может быть записан индекс любого элемента
массива a, равного
x.
 
 (4)
Индекс поcледнего элемента, равного
x-1.
 
 (5)
Индекс первого элемента, равного
x+1.
 
Упражнение 3:
Номер 1
Пусть дан массив a длины n,
элементы которого нестрого возрастают, т.е. соседние
элементы могут быть равными.
Рассмотрим фрагмент программы бинарного поиска
элемента x в массиве
a длины n, где
после отбрасывания особых ситуаций рассматривается
основной случай:
. . .
// Утверждение: a[0] <= x && x < a[n-1]
int beg = 0; int end = n-1;
while (end-beg > 1) {
// Инвариант: a[beg] <= x && x < a[end]
int c = (beg + end) / 2;
if (a[c] <= x) {
beg = c;
} else {
end = c;
}
}
if (a[beg] == x) {
*idx = beg;
} else {
*idx = end;
}
. . .
Пусть значение x содержится в массиве
в нескольких экземплярах. Индекс какого элемента
массива a будет записан в переменную *idx?
Ответ:
 (1)
Индекс первого элемента, равного
x.
 
 (2)
Индекс поcледнего элемента, равного
x.
 
 (3)
Может быть записан индекс любого элемента
массива a, равного
x.
 
 (4)
Может быть записан индекс любого элемента
массива a, равного
x+1.
 
 (5)
Может быть записан индекс любого элемента
массива a, равного
x-1.
 
Номер 2
Пусть дан массив a длины n,
элементы которого нестрого возрастают, т.е. соседние
элементы могут быть равными.
Рассмотрим фрагмент программы бинарного поиска
элемента x в массиве
a длины n, где
после отбрасывания особых ситуаций рассматривается
основной случай:
. . .
// Утверждение: a[0] < x && x <= a[n-1]
int beg = 0; int end = n-1;
while (end-beg > 1) {
// Инвариант: a[beg] < x && x <= a[end]
int c = (beg + end) / 2;
if (a[c] < x) {
beg = c;
} else if (a[c] > x) {
end = c;
} else {
// Утверждение: x == a[c]
*idx = c;
return true;
}
}
*idx = end;
return (x >= a[end]);
. . .
Пусть значение x содержится в массиве
в нескольких экземплярах. Индекс какого элемента
массива a будет записан в переменную *idx?
Ответ:
 (1)
Индекс первого элемента, равного
x.
 
 (2)
Индекс поcледнего элемента, равного
x.
 
 (3)
Может быть записан индекс любого элемента
массива a, равного
x.
 
 (4)
Индекс первого элемента, равного
x+1.
 
 (5)
Индекс поcледнего элемента, равного
x-1.
 
Упражнение 4:
Номер 1
Пусть элементы массива a
нестрого возрастают (соседние элементы могут быть равными).
Дано произвольное значение x, требуется
найти максимальный индекс i такой, что
a[i] <= x. Используется идея алгоритма
бинарного поиска. Каким должен быть инвариант цикла,
в котором рассматривается основной случай после отбрасывания
исключительных ситуаций?
(Условие завершения цикла
end == beg+1.)
Ответ:
 (1)
a[beg] < x <= a[end],
ответ в переменной end.
 
 (2)
a[beg] <= x < a[end],
ответ в переменной beg.
 
 (3)
a[beg] < x <= a[end],
ответ в переменной beg.
 
Номер 2
Пусть элементы массива a
нестрого возрастают (соседние элементы могут быть равными).
Дано произвольное значение x, требуется
найти минимальный индекс i такой, что
a[i] >= x. Используется идея алгоритма
бинарного поиска. Каким должен быть инвариант цикла,
в котором рассматривается основной случай после отбрасывания
исключительных ситуаций?
(Условие завершения цикла
end == beg+1.)
Ответ:
 (1)
a[beg] < x <= a[end],
ответ в переменной end.
 
 (2)
a[beg] <= x < a[end],
ответ в переменной beg.
 
 (3)
a[beg] < x <= a[end],
ответ в переменной beg.
 
Упражнение 5:
Номер 1
Пусть элементы массива a
нестрого возрастают (соседние элементы могут быть равными).
Дано произвольное значение x, требуется
найти максимальный индекс i такой, что
a[i] <= x. Используется идея алгоритма
бинарного поиска. В приведенном ниже цикле
рассматривается основной случай после отбрасывания
исключительных ситуаций:
while (end-beg > 1) {
int c = (beg+end)/2;
if (a[c] <= x)
beg = c;
else
end = c;
}
// ответ в переменной beg
Какое утверждение является
инвариантом этого цикла?
Ответ:
 (1)
a[beg] < x <= a[end].
 
 (2)
a[beg] <= x < a[end].
 
 (3)
a[beg] > x <= a[end].
 
 (4)
a[beg] < x >= a[end].
 
Номер 2
Программа, использующая бинарный поиск, ищет
элемент в массиве длины миллион в среднем за
одну тысячную секунды. Сколько примерно времени
потребуется на поиск, если мы заменим алгоритм поиска
с бинарного на последовательный?
Ответ:
 (1)
5 секунд
 
 (2)
20 секунд
 
 (3)
50 секунд
 
 (4)
10 секунд
 
 (5)
40 секунд
 
Упражнение 6:
Номер 1
Программа, использующая последовательный поиск, ищет
элемент в массиве длины миллион в среднем за
одну секунду. Сколько примерно времени
потребуется на поиск, если мы заменим алгоритм поиска
с последовательного на бинарный?
Ответ:
 (1)
0.0001 секунды
 
 (2)
0.0002 секунды
 
 (3)
0.00001 секунды
 
 (4)
0.00002 секунды
 
Номер 2
Оцените примерно, во сколько раз алгоритм бинарного поиска
работает быстрее алгоритма последовательного поиска
для массива из 64 миллионов элементов.
Ответ:
 (1)
Примерно в 500 тысяч раз.
 
 (2)
Примерно в миллион раз.
 
 (3)
Примерно в 2.5 миллиона раз.
 
 (4)
Примерно в 3 миллиона раз.