ВУЗ:
Составители:
Рубрика:
146
В следующем примере приводится та же схема перебора, текущим является
последний элемент для каждых k соседей:
for i:=k to n do {у первых k-1 элементов нет k соседей справа }
{ обработка a[i-k+1], a[i-k+2],...,a[i] }.
Случай 8. Перебрать соседние элементы массива, двигаясь от конца массива к
его началу. Сначала рассмотрим схему для двух соседей. В случае массива,
состоящего из 5 элементов, обработка должна проводиться в таком порядке: a[5] и
a[4], a[4] и a[3], a[3] и a[2], a[2] и a[1]. Здесь можно так же, как и в предыдущем
случае, предложить два варианта построения схемы.
Вариант 1. for i:=n downto 2 do {обработка a[i] и a[i-1]}.
Вариант 2. for i:=n-1 downto 1 do {обработка a[i] a[i+1] }.
Можно обобщить эту схему на случай k соседей. Здесь возможны k различных
вариантов реализации схемы в зависимости от того, какой элемент среди k соседей
выбран текущим. Ниже приводятся варианты схем для случаев, когда текущим
элементом является первый и последний.
Вариант 1. for i:=n downto k do {обработка a[i-k+1],...,a[i-1],a[i]}.
Вариант 2. for i:=n-k+1 downto 1 do {обработка a[i],a[i+1],...,a[i+k-1]}.
Случай 9. Перебрать все элементы массива группами по k, двигаясь от начала к
концу. Например, для массива, состоящего из пяти элементов, обработка группами
по два (k=2) должна вестись так: a[1] и a[2], a[3] и a[4]. У элемента a[5] нет пары
для образования группы, поэтому он не обрабатывается.
Обработка этого же массива группами по три должна вестись так: a[1], a[2] и
a[3].
Элементы a[4] и a[5] группы по три не образуют.
Из рассмотренных примеров видно, что в этой схеме перебора шаг равен
размеру группы (k), а индекс последнего элемента, который может быть обработан,
не должен быть больше, чем n-k+1. Однако проверку окончания можно ослабить,
заменив ее на проверку невыхода индекса за верхнюю границу, так как перебор
ведется с шагом k и элементы, не образующие группы, будут просто пропущены.
Здесь также возможны различные варианты в зависимости от выбора текущего
элемента в группе. Всего таких вариантов k. Ниже приводятся варианты, в которых
текущий элемент выбран первым и последним.
Вариант 1.
i:=1;
while i<=n-k+1 do
begin
{обработка a[i],a[i+1],...,a[i+k-1]}
i:=i+k
end.
Вариант 2.
i:=k;
while i<=n do
begin
{обработка a[i-k+1],a[i-k+2],...,a[i]}
i:=i+k
end.
Упражнения:
146
В следующем примере приводится та же схема перебора, текущим является
последний элемент для каждых k соседей:
for i:=k to n do {у первых k-1 элементов нет k соседей справа }
{ обработка a[i-k+1], a[i-k+2],...,a[i] }.
Случай 8. Перебрать соседние элементы массива, двигаясь от конца массива к
его началу. Сначала рассмотрим схему для двух соседей. В случае массива,
состоящего из 5 элементов, обработка должна проводиться в таком порядке: a[5] и
a[4], a[4] и a[3], a[3] и a[2], a[2] и a[1]. Здесь можно так же, как и в предыдущем
случае, предложить два варианта построения схемы.
Вариант 1. for i:=n downto 2 do {обработка a[i] и a[i-1]}.
Вариант 2. for i:=n-1 downto 1 do {обработка a[i] a[i+1] }.
Можно обобщить эту схему на случай k соседей. Здесь возможны k различных
вариантов реализации схемы в зависимости от того, какой элемент среди k соседей
выбран текущим. Ниже приводятся варианты схем для случаев, когда текущим
элементом является первый и последний.
Вариант 1. for i:=n downto k do {обработка a[i-k+1],...,a[i-1],a[i]}.
Вариант 2. for i:=n-k+1 downto 1 do {обработка a[i],a[i+1],...,a[i+k-1]}.
Случай 9. Перебрать все элементы массива группами по k, двигаясь от начала к
концу. Например, для массива, состоящего из пяти элементов, обработка группами
по два (k=2) должна вестись так: a[1] и a[2], a[3] и a[4]. У элемента a[5] нет пары
для образования группы, поэтому он не обрабатывается.
Обработка этого же массива группами по три должна вестись так: a[1], a[2] и
a[3]. Элементы a[4] и a[5] группы по три не образуют.
Из рассмотренных примеров видно, что в этой схеме перебора шаг равен
размеру группы (k), а индекс последнего элемента, который может быть обработан,
не должен быть больше, чем n-k+1. Однако проверку окончания можно ослабить,
заменив ее на проверку невыхода индекса за верхнюю границу, так как перебор
ведется с шагом k и элементы, не образующие группы, будут просто пропущены.
Здесь также возможны различные варианты в зависимости от выбора текущего
элемента в группе. Всего таких вариантов k. Ниже приводятся варианты, в которых
текущий элемент выбран первым и последним.
Вариант 1.
i:=1;
while i<=n-k+1 do
begin
{обработка a[i],a[i+1],...,a[i+k-1]}
i:=i+k
end.
Вариант 2.
i:=k;
while i<=n do
begin
{обработка a[i-k+1],a[i-k+2],...,a[i]}
i:=i+k
end.
Упражнения:
Страницы
- « первая
- ‹ предыдущая
- …
- 142
- 143
- 144
- 145
- 146
- …
- следующая ›
- последняя »
