Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск в неупорядоченном массиве со сложностью N/3 
:(
    Опции темы
phpsuxxx
Дата 11.8.2014, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 6.8.2014

Репутация: нет
Всего: нет



Почему если случайно выбирать номер элемента, время поиска существенно уменьшается?
Код

//Так в среднем n/2
int LineSearch(int A[], int n, int key)
 {
      for (int i=0; i<n; i++)
             if (A[i]==key) return i;
      return -1;
 }


Код

//А так в среднем n/3
int Search(int A[], int n, int key)
 {
      int i=0;
      while(true)
      {
            if (A[rand()%n]==key) return i;
            ++i;
      }
      return -1;
 }



Это сообщение отредактировал(а) phpsuxxx - 11.8.2014, 14:20
PM MAIL   Вверх
Akina
Дата 11.8.2014, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Среднее время поиска... и не n/3, а n/e.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
volatile
Дата 11.8.2014, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



Цитата(phpsuxxx @  11.8.2014,  11:47 Найти цитируемый пост)
если случайно выбирать номер элемента, время поиска существенно уменьшается?

кто вам это сказал ? 

Это сообщение отредактировал(а) volatile - 11.8.2014, 14:01
PM MAIL   Вверх
phpsuxxx
Дата 11.8.2014, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 6.8.2014

Репутация: нет
Всего: нет



Цитата(volatile @ 11.8.2014,  13:57)
кто вам это сказал ?

Прочитал в одной книге. Написал программу - работает действительно быстрее.

PM MAIL   Вверх
volatile
Дата 11.8.2014, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



phpsuxxx, 
В том варианте что у вас, оно работать в среднем не будет быстрее
Даже несколько дольше.

Проведите несколько сотен экспериментов, с разными случайными числами
не забудьде сделать srand от текущео времени
и вы убедитетесь

Добавлено через 2 минуты и 10 секунд
зы
Цитата(phpsuxxx @  11.8.2014,  11:47 Найти цитируемый пост)
int Search(int A[], int n, int key)
 {
      while(true)
            if (A[rand()%n]==key) return i;
      return -1;
 }

до последнего ретурна здесь вообще никогда не дойдет, так что если в массиве нет искомого числа, цикл будет вычным
(но это так, чтоб не пугались, если зависнет  smile )
PM MAIL   Вверх
phpsuxxx
Дата 11.8.2014, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 6.8.2014

Репутация: нет
Всего: нет



Цитата(volatile @ 11.8.2014,  14:18)
phpsuxxx, 
В том варианте что у вас, оно работать в среднем не будет быстрее
Даже несколько дольше.

Проведите несколько сотен экспериментов, с разными случайными числами
не забудьде сделать srand от текущео времени
и вы убедитетесь

Добавлено @ 14:20
зы
Цитата(phpsuxxx @  11.8.2014,  11:47 Найти цитируемый пост)
int Search(int A[], int n, int key)
 {
      int i=0;
      while(true)
      {
            if (A[rand()%n]==key) return i;
            ++i;
      }
      return -1;
 }

до последнего ретурна здесь вообще никогда не дойдет, так что если в массиве нет искомого числа, цикл будет вычным
(но это так, чтоб не пугались, если зависнет  smile )

Запустил цикл на тысячу раз. В среднем чуть больше n/3. По видимому n/e как написал Akina.
А насчёт зависания в книге сказано, что этот алгоритм для случаев когда нужный элемент заведомо есть в массиве.
Кстати, поправил ошибку в коде, сейчас можно собрать программу и убедиться самим.

Это сообщение отредактировал(а) phpsuxxx - 11.8.2014, 14:27
PM MAIL   Вверх
Akina
Дата 11.8.2014, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(phpsuxxx @  11.8.2014,  15:23 Найти цитируемый пост)
По видимому n/e как написал Akina.

Не точно, но близко. Счётная задачка, вполне на уровне 9 или 10 класса.
Причём чем больше n, тем ближе знаменатель к е. А это уже 1 курс технического ВУЗа.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.