2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Гайки и болты
Сообщение19.05.2020, 14:10 


30/09/18
161
Это известная задача про гайки и болты - есть $n$ болтов, $n$ гаек, каждый болт подходит ровно к одной гайке, при попытке совместить болт с гайкой становится известно, подходят ли они друг другу и если нет, то что больше - болт или гайка. И нужно придумать детерминированный алгоритм, находящий все пары болт-гайка за меньше чем $O(n^2)$ сравнений.
Нужен простой алгоритм, мне не нужно как можно меньше сравнений, главное, чтоб вышло меньше чем $O(n^2)$. Вроде как идея должна быть найти болт, делящий все гайки пополам, а затем работать с двумя половинами. Но как такой болт найти менее чем за квадратичное время?
Выручайте, сроки горят, а я что-то туплю!

 Профиль  
                  
 
 Re: Гайки и болты
Сообщение19.05.2020, 15:03 
Заслуженный участник
Аватара пользователя


23/07/05
17973
Москва
Гайки и болты заранее отсортированы? Если нет, то можно ли сравнивать гайку с гайкой и болт с болтом? Является ли диаметр единственным существенным параметром болтов и гаек?

Д. Кнут. Искусство программирования для ЭВМ. Том 3. Сортировка и поиск.

 Профиль  
                  
 
 Re: Гайки и болты
Сообщение19.05.2020, 15:20 
Аватара пользователя


01/11/14
1656
Principality of Galilee
Здесь на форуме уже была эта задача.

 Профиль  
                  
 
 Re: Гайки и болты
Сообщение19.05.2020, 18:09 


30/09/18
161
Gagarin1968 в сообщении #1463878 писал(а):
Здесь на форуме уже была эта задача
.

Спасибо! Там так и не решили как автор хотел :( Так что и сейчас, наверное, без шансов.

 Профиль  
                  
 
 Re: Гайки и болты
Сообщение19.05.2020, 18:30 
Заслуженный участник
Аватара пользователя


01/08/06
3054
Уфа
Но выяснили, что это очень сложная задача, не квалификационного уровня (даже на должность профессора). Несколько лет никто в мире не мог решить!
Непонятно, что значит "сроки горят". Если вам задали её на собеседовании, от вас ждут не решения, а попыток рассуждений, которые и будут оценивать. На каждое рассуждение будут, скорее всего, задавать уточняющие вопросы, так что мы тут всё равно не сможем помочь.

 Профиль  
                  
 
 Re: Гайки и болты
Сообщение19.05.2020, 18:34 


14/01/11
2919
Если что, есть статьи, где изложены асимптотически оптимальные алгоритмы для этой задачи. Например, https://hungary.pure.elsevier.com/en/publications/matching-nuts-and-bolts-in-on-log-n-time

 Профиль  
                  
 
 Re: Гайки и болты
Сообщение20.05.2020, 17:39 


12/07/15
2954
г. Чехов
Попробую развить простой подход: применить обычный метод сортировки (произвольный). Основной смысл следующий: смешиваем два несортированных массива болтов и гаек в один общий несортированный, каждый элемент при этом помечаем буквами Б (болт) или Г (гайка). Мы получаем обычный массив для обычного алгоритма сортировки, но при сортировке не забываем параллельно сортировать массив маркеров Б/Г. Основной сортируемый массив имеет размерность $2n$, то есть $O(n)$.
1. Особенность сортировки: нельзя сравнивать одноименные элементы (Б нельзя сравнивать с Б, Г нельзя сравнивать с Г). Можно пробовать сравнивать, но тогда сравнение выдает ошибку, а сравнение при этом не засчитывается (сравнение одноименных элементов безопасно!). Важное предложение: при ошибке сравнения - переходить к следующему/другому элементу (skip). В этом моменте (skip) стандартные алгоритмы сортировки могут отличаться в поведении.
Пусть skip происходит влево или вправо, тогда рано или поздно найдется разноименный элемент, пригодный для сравнения, либо конец массива.
2. Болт и гайка, которые совпали, располагать друг за другом в произвольном порядке, а совпадение помечать массивом маркеров совпадения: С=0 - не совпало, С=1 - совпало. Этот массив также сортировать параллельно с основным массивом. Сортировка останавливается, когда весь массив C состоит из 1.

Итак, можно пробовать применять стандартные алгоритмы сортировки, нужно только дописать алгоритм skip и убедиться в его безопасном внедрении (что не нарушаются инварианты сортировки).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group