3673

Алгоритми пошуку в одновимірних масивах

Лекция

Информатика, кибернетика и программирование

Алгоритми пошуку в одновимірних масивах Алгоритми пошуку застосовуються для знаходження, наприклад, у масиві елемента з потрібними властивостями. Звичайно розрізняють постановки завдання пошуку для першого й останнього входження елемента. В усіх ниж...

Украинкский

2012-11-05

40.5 KB

46 чел.

Алгоритми пошуку в одновимірних масивах

Алгоритми пошуку застосовуються для знаходження, наприклад, у масиві елемента з потрібними властивостями. Звичайно розрізняють постановки завдання пошуку для першого й останнього входження елемента. В усіх нижче викладених алгоритмах будемо вважати, що виробляється пошук у масиві A з N цілих чисел елемента, рівного X.

Лінійний пошук

Лінійний пошук здійснюється циклом (while ) з подвійною умовою. Перша умова контролює індекс на приналежність масиву, наприклад, (i<=N). Друга умова - це умова пошуку. У нашому випадку в циклі while ця умова продовження пошуку: (A[i]<>X), (A[i]=X). У тілі циклу звичайно пишеться тільки один оператор: зміна індексу в масиві.

Після виходу із циклу необхідно перевірити, по якому з умов ми вийшли. В операторі if звичайно повторюють перша умова циклу. Можна говорити про успішний пошук із циклом while при виконанні цієї умови.

Приклад 23.1. : Лінійний пошук

Console.WriteLine("Введите число ");

int n = Int32.Parse(Console.ReadLine());

int[] a = new int[n+1];

Random r = new Random();

int i, min, i1;

for (i = 1; i <= n; i++)

{

a[i] = r.Next(100);

Console.Write(a[i] + " ");

}

Console.WriteLine();

Console.WriteLine("Введите число ");

int m = Int32.Parse(Console.ReadLine());

i = 1;

while ((i < n) && (a[i] != m)) i++;

{

if (i < n) { Console.WriteLine("Перше входження" + m + "место" + i); }

else { Console.WriteLine("Нет такого елемента"); }

}

Console.ReadLine();

При пошуку останнього входження після уведення повинні йти оператори:

Console.WriteLine("Введите число ");

int n = Int32.Parse(Console.ReadLine());

int[] a = new int[n+1];

Random r = new Random();

int i, min, i1;

for (i = 1; i <= n; i++)

{

a[i] = r.Next(100);

Console.Write(a[i] + " ");

}

Console.WriteLine();

Console.WriteLine("Введите число ");

int m = Int32.Parse(Console.ReadLine());

i = n;

while ((i > 1) && (a[i] != m)) i--;

{

if (i > 1) { Console.WriteLine("Перше входження" + m + "место" + i); }

else { Console.WriteLine("Нет такого елемента"); }

}

Console.ReadLine();

Пошук бар’єром

Ідея пошуку з бар'єром полягає в тому, щоб не перевіряти щораз у циклі умова, пов'язане із границями масиву. Це можна забезпечити, установивши в масив так званий бар'єр: будь-який елемент, що задовольняє умові пошуку. Тим самим буде обмежена зміна індексу.

Вихід із циклу, у якому тепер залишається тільки умова пошуку, може відбутися або на знайденому елементі, або на бар'єрі. Таким чином, після виходу із циклу перевіряється, не чи бар'єр ми знайшли? Обчислювальна складність пошуку з бар'єром менше, ніж у лінійного пошуку, але також є величиною того ж порядку, що й N - кількість елементів масиву.

Існує два способи установки бар'єра: додатковим елементом або замість крайнього елемента масиву.

Приклад 23.2.: Пошук з бар'єром

Console.WriteLine("Введите число ");

int n = Int32.Parse(Console.ReadLine());

int[] a = new int[n+2];

Random r = new Random();

int i, min, i1;

for (i = 1; i <= n; i++)

{

a[i] = r.Next(100);

Console.Write(a[i] + " ");

}

Console.WriteLine();

Console.WriteLine("Введите число ");

int m = Int32.Parse(Console.ReadLine());

a[n + 1] = m;

i = 1;

while (a[i] != m) i++;

{

if (i <=n ) { Console.WriteLine("Перше входження" + m + "место" + i);

else { Console.WriteLine("Нет такого елемента"); }

}

Console.ReadLine();

Двійковий (БІНАРНИЙ) пошук

Алгоритм двійкового пошуку можна використати для пошуку елемента із заданою властивістю тільки в масивах, упорядкованих по цій властивості. Так при пошуку числа із заданим значенням необхідно мати масив, упорядкований по зростанню або по убуванню значень елементів. А, наприклад, при пошуку числа із заданою сумою цифр масив повинен бути впорядкований по зростанню або по убуванню сум цифр елементів.

Ідея алгоритму полягає в тому, що масив щораз ділиться навпіл і вибирається та частина, де може перебувати потрібний елемент. Розподіл триває поки частина масиву для пошуку більше одного елемента, після чого залишається перевірити цей елемент, що залишився, на виконання умови пошуку.

Існують дві модифікації цього алгоритму для пошуку першого й останнього входження. Все залежить від того, як вибирається середній елемент: округленням у меншу або більшу сторону. У першому випадку середній елемент ставиться до лівої частини масиву, а в другому - до правого.

У процесі роботи алгоритму двійкового пошуку розмір фрагмента, де цей пошук повинен тривати, щораз зменшується приблизно у два рази. Це забезпечує обчислювальну складність алгоритму порядку логарифма N по підставі 2, де N - кількість елементів масиву.

Приклад 23.3. : Пошук в упорядкованому по зростанню масиві першого входження числа X.

Console.WriteLine("Введите число ");

int n = Int32.Parse(Console.ReadLine());

int[] a = new int[n+2];

Random r = new Random();

int i;

for (i = 1; i <= n; i++)

{

a[i] = r.Next(100);

Console.Write(a[i] + " ");

}

Console.WriteLine();

for (i=1; i<=n-1;i++)

for (int j = 1; j <= n - 1; j++)

{

if (a[j] > a[j + 1])

{

int b = a[j]; a[j] = a[j + 1]; a[j + 1] = b;

}

}

for (i = 1; i <= n; i++)

{

Console.Write(a[i] + " ");

}

Console.WriteLine();

Console.WriteLine("Введите число ");

int m = Int32.Parse(Console.ReadLine());

int left = 1; int right = n;

while (left < right)

{

int c = (left + right) / 2;

Console.WriteLine(left+ " " + right + " " +c);

if (m > a[c]) { left = c + 1; } else { right = c; }

}

if (m == a[left]) { Console.WriteLine("Перше входження" + m + "место" + left); }

else { Console.WriteLine("Нет такого елемента"); }

 

 

Console.ReadLine();


 

А также другие работы, которые могут Вас заинтересовать

83775. Субъекты налоговых правоотношений: общая характеристика 46.47 KB
  Точное определение субъекта налогового права имеет и практическое значение поскольку позволяет выявить круг лиц вступающих в налоговые отношения и действия которых влекут юридически значимые последствия. Наличие критериев позволяющих относить какоелибо физическое или юридическое лицо к субъектам налогового права дает возможность установить какие лица и их действия подпадают под юрисдикцию законодательства о налогах и сборах. Только субъекты налогового права могут иметь права и нести обязанности предусмотренные НК РФ и принятыми в...
83776. Правовой статус налогоплательщиков, налоговых агентов и налоговых представителей 57.26 KB
  Возникновение обстоятельств влекущих уплату суммы налога или сбора служит юридическим фактом на основании которого субъект налогового права приобретает статус участника налоговых правоотношений. 11 НК РФ указывает что физические лица осуществляющие предпринимательскую деятельность без образования юридического лица но не зарегистрировавшиеся в качестве индивидуальных предпринимателей в нарушение требований гражданского законодательства при исполнении налоговых обязанностей не вправе ссылаться на то что они не являются индивидуальными...
83777. Банки как субъекты налогового права. Иные участники налоговых отношений 49.16 KB
  Иные участники налоговых отношений. 9 НК РФ к участникам налоговых отношений регулируемых законодательством о налогах и сборах фактически они таковыми являются и обладают специальным налоговоправовым статусом. Банки являются субъектами налоговых правоотношений обеспечивающими налоговые изъятия и наделенными в связи с этим соответствующими правами и обязанностями. Участие банков в налоговых отношениях носит более сложный по сравнению с иными участниками налоговых отношений регулируемых законодательством о налогах и сборах характер.
83778. Правовой статус налоговых органов. Их права и обязанности. Обязанности должностных лиц налоговых органов 43.23 KB
  Обязанности должностных лиц налоговых органов. Правовой статус налоговых органов РФ объем и характер прав и обязанностей системы налоговых органов России строго определенных законодательством. Правовое положение налоговых органов обусловлено их местом в системе органов государственного управления страны наделением их над ведомственными полномочиями по отношению к организационно неподчиненным объектам управления по контролю за соблюдением налогового законодательства правильностью их исчисления полнотой и своевременностью внесения в...
83779. Правовой статус таможенных органов, финансовых органов, органов внутренних дел, следственных органов 44.78 KB
  Таможенные органы пользуются правами и несут обязанности налоговых органов по взиманию налогов при перемещении товаров через таможенную границу Таможенного союза в соответствии с таможенным законодательством ТС и законодательством РФ о таможенном деле. При исполнении указанных функций таможенные органы и их должностные лица реализовывают в пределах своей компетенции права и обязанности налоговых органов ст. В ходе проведения контрольных мероприятий таможенные органы вправе: запрашивать документы и сведения в том числе в форме электронных...
83780. Исполнение обязанности по уплате налогов и сборов. Объекты налогообложения. Принципы определения цены товаров, работ или услуг для целей налогообложения 44.19 KB
  Сущность исполнения налоговой обязанности заключается в уплате налога или сбора. Налоговая обязанность возникает с момента возникновения установленных налоговым законодательством обстоятельств предусматривающих уплату конкретного налога или сбора. Так вот обстоятельствами с которыми налоговое законодательство связывает возникновение налоговой обязанности являются следующие: вопервых это наличие объекта конкретного налога или сбора; вовторых это наличие непосредственной связи между этим объектом и субъектом налогоплательщиком. И...
83781. Исполнение обязанности по уплате налогов и сборов. Основания возникновения, изменения и прекращения обязанности по уплате налогов и соборов; порядок исчисления налогов; взыскание налога за счет денежных средств и иного имущества налогоплательщика 46.34 KB
  Основания возникновения изменения и прекращения обязанности по уплате налогов и соборов; порядок исчисления налогов; взыскание налога за счет денежных средств и иного имущества налогоплательщика. Возникновение обязанности по уплате налогов и сборов связано с несколькими обстоятельствами: с наличием конституционноправовой обязанности по уплате налогов по нормам законодательства о налогах и сборах в которых детализируется реализация обязанности по уплате налогов объектами налогообложения.  Основанием возникновения налогового обязательства...
83782. Изменение срока уплаты налога и сбора: общие условия изменения срока уплаты; обстоятельства исключающие изменение срока уплаты, органы, уполномоченные принимать решение об изменении сроков уплаты 41.84 KB
  Изменением срока уплаты налога и сбора признается перенос установленного срока уплаты налога и сбора на более поздний срок. Срок уплаты налога и или сбора может быть изменен в отношении всей подлежащей уплате суммы налога и или сбора либо ее части с начислением процентов на сумму задолженности. Изменение срока уплаты налога и сбора осуществляется в форме отсрочки рассрочки инвестиционного налогового кредита.
83783. Порядок и условия предоставления отсрочки и рассрочки по уплате налога и сбора. Инвестиционный налоговый кредит. Порядок и условия его предоставления 48.98 KB
  Отсрочка или рассрочка по уплате налога представляет собой изменение срока уплаты на срок не превышающий один год соответственно с единовременной или поэтапной уплатой суммы задолженности. Отсрочка или рассрочка может быть предоставлена заинтересованному лицу если имеются достаточные основания полагать что возможность уплаты указанным лицом такого налога возникнет в течение срока на который предоставляется отсрочка или рассрочка при наличии хотя бы одного из следующих оснований: 1 причинение этому лицу ущерба в результате стихийного...