2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Как найти звезду в группе?
Сообщение09.05.2012, 23:02 


09/05/12
18
Здравствуйте, друзья!
Подскажите, пожалуйста, вот с такой задачей:

"Дана группа из $N$ человек. Каждый человек в этой группе имеет уникальный номер от $1$ до $N$.
Какие-то члены этой группы знакомы друг с другом, какие-то нет.
В этой группе есть один и только один особенный человек (будем называть его "звезда"),
который отличатся от других членов группы тем, что его знают все, а он не знает никого.
Существует функция (уже реализована):

bool first_knows_second(int first, int second);

Эта функция возвращает $true$, если $first$ знает $second$, в противном
случае возвращает $false$.
Какого количество вызовов этой функции необходимо и достаточно, что бы
найти в этой группе звезду?"

 Профиль  
                  
 
 Re: Как найти звезду в группе?
Сообщение10.05.2012, 09:49 
Заслуженный участник
Аватара пользователя


01/08/06
3149
Уфа
$N-1$

 Профиль  
                  
 
 Re: Как найти звезду в группе?
Сообщение10.05.2012, 12:45 


09/05/12
18
worm2
Я думаю так же, но не могу обосновать.

 Профиль  
                  
 
 Re: Как найти звезду в группе?
Сообщение10.05.2012, 12:48 
Заслуженный участник
Аватара пользователя


13/08/08
14496
По индукции.

 Профиль  
                  
 
 Re: Как найти звезду в группе?
Сообщение10.05.2012, 16:48 


26/08/11
2121
Каждый вызов функции элиминирует одного человека. Если функция возвращает True, значит first не может быть звездой, а если False, то second не может быть. Необходимо элиминировать $n-1$ человек.

 Профиль  
                  
 
 Re: Как найти звезду в группе?
Сообщение04.06.2012, 19:34 


13/05/12
48
RF
В "противном случае" бывают разные.

 Профиль  
                  
 
 Re: Как найти звезду в группе?
Сообщение02.07.2012, 09:17 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
Donald Capacine в сообщении #569211 писал(а):
его знают все, а он не знает никого.

Знает ли он сам себя? :-)

 Профиль  
                  
 
 Re: Как найти звезду в группе?
Сообщение02.07.2012, 11:20 
Аватара пользователя


08/02/12
246
Shadow в сообщении #569430 писал(а):
Каждый вызов функции элиминирует одного человека. Если функция возвращает True, значит first не может быть звездой, а если False, то second не может быть. Необходимо элиминировать человек.

Это говорит только о достаточности N-1 хода. Откуда Вы знаете, что для того, чтобы указать звезду необходимо элиминировать всех остальных?

Профессор Снэйп в сообщении #591193 писал(а):
Знает ли он сам себя?

С одной стороны его все (т.е. и он сам) знают, а с другой он никого не знает (т.е. и самого себя). Выходит, что задача с противоречием в условии :D

 Профиль  
                  
 
 Re: Как найти звезду в группе?
Сообщение02.07.2012, 20:16 


26/08/11
2121
AnDe в сообщении #591235 писал(а):
Откуда Вы знаете, что для того, чтобы указать звезду необходимо элиминировать всех остальных?
Потому что каждый из оставшихся не проиграл ни одного матча. (даже если вообще не играл). И может стать чемпионом.

 Профиль  
                  
 
 Re: Как найти звезду в группе?
Сообщение04.07.2012, 08:47 
Заслуженный участник
Аватара пользователя


11/03/08
10092
Москва
AnDe в сообщении #591235 писал(а):
Shadow в сообщении #569430 писал(а):
Каждый вызов функции элиминирует одного человека. Если функция возвращает True, значит first не может быть звездой, а если False, то second не может быть. Необходимо элиминировать человек.

Это говорит только о достаточности N-1 хода. Откуда Вы знаете, что для того, чтобы указать звезду необходимо элиминировать всех остальных?

Из условия.
Цитата:
есть один и только один

 Профиль  
                  
 
 Re: Как найти звезду в группе?
Сообщение05.07.2012, 08:39 
Аватара пользователя


08/02/12
246
Евгений Машеров
Не понимаю, можете объяснить? По сути условие "есть один и только один" - лишнее, можно было бы сказать, что просто есть один, больше одного их не могло быть по определению звезды. И это же условие говорит все таки о достаточности, мол отсеяли N-1, а последний точно - звезда. А вот необходимость я понял так: если у нас осталось больше одного кандидата, то мы можем построить модели, когда выполняется все что мы уже узнали, и звездами являются разные люди, а значит мы не можем однозначно определить звезду.

 Профиль  
                  
 
 Re: Как найти звезду в группе?
Сообщение05.07.2012, 17:06 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
Евгений Машеров в сообщении #591940 писал(а):
Откуда Вы знаете, что для того, чтобы указать звезду необходимо элиминировать всех остальных?

Для каждой последовательности True и False длины $\leqslant N - 2$ необходимо подобрать таких $2$ варианта группы, чтобы в этих вариантах были разные "звёзды", а ответы бы шли согласно последовательностям.

Думаю, это возможно. Даже если придумывать более сложные стратегии, в которых выбор каждой следующей пары для вопроса зависит от ответов на предыдущие вопросы.

-- Чт июл 05, 2012 20:09:31 --

Но, надо сказать, нудное это дело. Я помню, как решал подобную штуку про минимальное число взвешиваний для определения фальшивой монеты. Всё делается, но рассмотрения довольно кропотливые. Хотя, возможно, стоит почитать какую-нибудь продвинутую книжку по теории игр, там эти вещи наверняка разобраны.

-- Чт июл 05, 2012 20:12:57 --

А вообще-то тут довольно простая индукция по $N$. При $N=2$ хотя бы один вопрос необходим. При переходе от $N$ к $N+1$ при обоих вариантах ответа на первый вопрос легко выделяется ситуация, когда после первого ответа остаётся $N$ человек, про которых по прежнему ничего не известно...

 Профиль  
                  
 
 Re: Как найти звезду в группе?
Сообщение05.07.2012, 18:28 
Аватара пользователя


08/02/12
246
Профессор Снэйп в сообщении #592416 писал(а):
Для каждой последовательности True и False длины необходимо подобрать таких варианта группы, чтобы в этих вариантах были разные "звёзды", а ответы бы шли согласно последовательностям.
Думаю, это возможно.

А вроде это легко на графах делается. Считаем людей за точки и проводим между ними разноцветные вектора. Например красный вектор от человека A до человека B, означает, что A не знает B. Синий вектор, что знает. А отсутствие за неопределенность. Если задали меньше N-1 вопроса осталось больше одного человека к которому не идет красных стрелок и от которых не идет синих стрелок, соответственно любой из них может стать звездой.

P.S. Вообще-то Вы цитируете мой вопрос, просто потом Евгений Машеров неудачно его цитировал. Какая-то последовательность неудачных цитирований :-)

 Профиль  
                  
 
 Re: Как найти звезду в группе?
Сообщение06.07.2012, 10:44 
Заслуженный участник
Аватара пользователя


11/03/08
10092
Москва
Да, с цитатами тут сильно запуталось.

А по необходимости N-1 - ну, давайте рассмотрим задачу проще. Нам уже сказали, кто звезда. Надо этот факт лишь проверить. И всё равно менее N-1 проверки не выйдет...

 Профиль  
                  
 
 Re: Как найти звезду в группе?
Сообщение06.07.2012, 13:20 


26/08/11
2121

(Оффтоп)

AnDe в сообщении #592433 писал(а):
Какая-то последовательность неудачных цитирований
:-) И начали ее Вы.
Internet Explorer - это браузер, предназначенный для скачивания другого браузера.
Если инструментарий не позволяет вам цитировать мои слова полностью, то нужно сделать это вручную.
AnDe в сообщении #591235 писал(а):
Shadow в сообщении #569430 писал(а):
Каждый вызов функции элиминирует одного человека. Если функция возвращает True, значит first не может быть звездой, а если False, то second не может быть. Необходимо элиминировать человек.
Shadow в сообщении #569430 писал(а):
Каждый вызов функции элиминирует одного человека. Если функция возвращает True, значит first не может быть звездой, а если False, то second не может быть. Необходимо элиминировать $n-1$ человек.
Единственное, что можно добится после $n-2$ вопросов - с вероятностью $\dfrac{n-1}{n}$ указать звезду. И все.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

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



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

Сейчас этот форум просматривают: bondkim137


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

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