Регистрирайте се
Как с 8 опита можем със 100% сигурност да познаем число
|
| Предишната тема :: Следващата тема |
| Автор |
Съобщение |
NoThanks Гост
|
Пуснато на: Fri Nov 21, 2008 7:20 pm Заглавие: Как с 8 опита можем със 100% сигурност да познаем число |
|
|
Като гледам, че напоследък пускате доста задачи тук, се присетих за една, по която правихме програмка в 10ти клас Да се намери алгоритъм, чрез който с 8 опита можем със 100% сигурност да познаем число в интервала [1;1000], ако след всеки от опитите ни се казва дали търсеното число е по-малко или по-голямо от това, което сме казали. |
|
| Върнете се в началото |
|
 |
Реклама
|
Пуснато на: Заглавие: Реклама |
|
|
|
|
|
| Върнете се в началото |
|
 |
dgs Редовен
Регистриран на: 23 Jun 2008 Мнения: 228
    гласове: 13
|
Пуснато на: Fri Nov 21, 2008 7:25 pm Заглавие: |
|
|
Тоя алгоритъм щеше да пасне перфектно на задачата за зайците (Задача 14 на седмицата - още не е решена), стига там да можехме да правим 8 последователни опита (а не само един).
// Трябват ни (само) 5 последователни опита и ще нахраним (поне) 936 човека. Може и повече, стига да са ни останали живи зайци след 5-тия опит |
|
| Върнете се в началото |
|
 |
Fed VIP

Регистриран на: 24 May 2007 Мнения: 1136 Местожителство: София (Русе)
  гласове: 33
|
Пуснато на: Fri Nov 21, 2008 8:20 pm Заглавие: |
|
|
| Двоично търсене по някакъв начин... |
|
| Върнете се в началото |
|
 |
dgs Редовен
Регистриран на: 23 Jun 2008 Мнения: 228
    гласове: 13
|
Пуснато на: Fri Nov 21, 2008 8:32 pm Заглавие: |
|
|
И аз в предишния пост си мислех за двоично търсене.
Ама сега на второ четене, мисля, че 8 на брой опита не стигат за 100% сигурност при 1000 числа
С 8 опита и двоично търсене, ще стесним интервала до четири последователни числа. И едно от тези четири е търсеното
При 1000 числа, трябват 10 опита за двоичното търсене |
|
| Върнете се в началото |
|
 |
Fed VIP

Регистриран на: 24 May 2007 Мнения: 1136 Местожителство: София (Русе)
  гласове: 33
|
Пуснато на: Fri Nov 21, 2008 8:57 pm Заглавие: Re: Как с 8 опита можем със 100% сигурност да познаем число |
|
|
Прав си...
| NoThanks написа: | | Да се намери алгоритъм, чрез който с 8 опита можем със 100% сигурност да познаем число в интервала [1;1000] |
Намираме си човек, който чете мисли и от време на време бъркаме нарочно числото да не стане съмнително  |
|
| Върнете се в началото |
|
 |
NoThanks Гост
|
Пуснато на: Sat Nov 22, 2008 12:22 pm Заглавие: |
|
|
| dgs написа: | И аз в предишния пост си мислех за двоично търсене.
Ама сега на второ четене, мисля, че 8 на брой опита не стигат за 100% сигурност при 1000 числа
С 8 опита и двоично търсене, ще стесним интервала до четири последователни числа. И едно от тези четири е търсеното
При 1000 числа, трябват 10 опита за двоичното търсене |
Прав си, грешката е моя. Все пак съм горд, че се сетих за задачката, макар и в не най-точния й вид  |
|
| Върнете се в началото |
|
 |
martosss VIP Gold

Регистриран на: 17 Mar 2007 Мнения: 3937 Местожителство: Somewhere over the rainbow
   гласове: 213
|
Пуснато на: Sat Nov 22, 2008 4:07 pm Заглавие: |
|
|
е ми трябва винаги да казваме числото, което е най-близко да средата на интервала... ама наистина с 8 опита не става с 9-10 опита е по-вероятно  |
|
| Върнете се в началото |
|
 |
Methuselah VIP

Регистриран на: 17 Feb 2007 Мнения: 1057 Местожителство: София
  гласове: 20
|
Пуснато на: Sat Nov 22, 2008 5:09 pm Заглавие: |
|
|
С log2|b - a| за [a;b]  |
|
| Върнете се в началото |
|
 |
dgs Редовен
Регистриран на: 23 Jun 2008 Мнения: 228
    гласове: 13
|
Пуснато на: Sat Nov 22, 2008 5:27 pm Заглавие: |
|
|
| Methuselah написа: | С log2|b - a| за [a;b]  |
ROUND(0,4999 + log2|b - a|) за [a;b]  |
|
| Върнете се в началото |
|
 |
JusTok Редовен

Регистриран на: 26 Jul 2007 Мнения: 117 Местожителство: Варна
      гласове: 24
|
Пуснато на: Sun Nov 23, 2008 10:07 pm Заглавие: |
|
|
Това май не е възможно с по малко от 10 опита  |
|
| Върнете се в началото |
|
 |
voknid Редовен

Регистриран на: 06 Dec 2008 Мнения: 150 Местожителство: гр. Пловдив
   гласове: 6
|
Пуснато на: Fri Dec 12, 2008 12:51 am Заглавие: Бабешки алгоритъм |
|
|
Деля 1000 на 2, резултата пак на 2 и т.н. докато получа число по-малко от 1. Ето какво се получава:
оп
ит 1000
1 = 500
2 = 250
3 = 125
4 = 62.5
5 = 31.25
6 = 15.625
7 = 7.8125
8 = 3.90625
9 = 1.953125
10 = 0.9765625
Извод: за гарантирано познаване на цяло число от 1 до 1000 са достатъчни 10 опита, ако след всеки опит знаем посоката (+ или -) към верния отговор. Не трябва ли автора на тази тема да и коригира заглавието - вместо 8, 10? Между другото - нещо подобно се използува в т.н. алгоритъм за сортиране на числа чрез "клатене". Ако бъркам нещо, поправете ме.
Пример: Игра "Познай теглото на предмета"
Стратегия:
1. След всеки грешен опит корегирам долната или горната граница на диапазона, в който търся.
2. За следващия опит избирам средата на новия диапазон.
3. Повтарям т.1 и т.2 докато диапазона се стесни достатъчно близо до верния отговор.
Начално положение: долна граница = 0 кг., горна = 1000 кг. Предмета тежи 300 кг. Аз не знам това, но трябва да го позная с минимален брой опити чрез налучкване или смятане.
опит 1 - посочвам 500 (средата), отговарят ми: "не улучи, надолу" (=> нова горна граница = 500)
опит 2 - посочвам 250 =(0 + 500)/2, отговарят ми: "не улучи, нагоре" (=> нова долна граница = 250)
опит 3 - посочвам 375 =(250+500)/2, отговарят ми: "не улучи, надолу" (=> нова горна граница = 375) и т.н. доближавайки се с всеки следващ опит все по-близо до верния отговор.
Трябва да помня последните долна и горна граница и да ги събирам и деля на 2 наум. Това е номера 
Последната промяна е направена от voknid на Fri Dec 12, 2008 7:45 pm; мнението е било променяно общо 3 пъти |
|
| Върнете се в началото |
|
 |
charlie_eppes Редовен
Регистриран на: 06 Dec 2007 Мнения: 207
    гласове: 16
|
Пуснато на: Fri Dec 12, 2008 5:59 am Заглавие: |
|
|
| Дайте пример!!! Ако да речем че числото е 71? Как ще стане работата??? |
|
| Върнете се в началото |
|
 |
savage309 Напреднал

Регистриран на: 28 Feb 2007 Мнения: 277
     гласове: 3
|
Пуснато на: Fri Dec 12, 2008 6:59 pm Заглавие: |
|
|
| charlie_eppes написа: | | Дайте пример!!! Ако да речем че числото е 71? Как ще стане работата??? |
500,250,125,63,94,78,70,74,72,71  |
|
| Върнете се в началото |
|
 |
charlie_eppes Редовен
Регистриран на: 06 Dec 2007 Мнения: 207
    гласове: 16
|
Пуснато на: Fri Dec 12, 2008 7:19 pm Заглавие: |
|
|
| savage309 написа: | | charlie_eppes написа: | | Дайте пример!!! Ако да речем че числото е 71? Как ще стане работата??? |
500,250,125,63,94,78,70,74,72,71  |
Можеш ли да обясниш какво правиш след 63? |
|
| Върнете се в началото |
|
 |
voknid Редовен

Регистриран на: 06 Dec 2008 Мнения: 150 Местожителство: гр. Пловдив
   гласове: 6
|
Пуснато на: Fri Dec 12, 2008 8:09 pm Заглавие: |
|
|
| charlie_eppes написа: | | savage309 написа: | | charlie_eppes написа: | | Дайте пример!!! Ако да речем че числото е 71? Как ще стане работата??? |
500,250,125,63,94,78,70,74,72,71  |
Можеш ли да обясниш какво правиш след 63? |
[tex]94 = int(\frac{63+125}{2})[/tex] отг.: не, надолу
[tex]78 = int(\frac{63+94}{2})[/tex] отг.: не, надолу
[tex]70 = int(\frac{63+78}{2})[/tex] отг.: не, нагоре
[tex]74 = int(\frac{70+78}{2})[/tex] отг.: не, надолу
[tex]72 = int(\frac{70+74}{2})[/tex] отг.: не, надолу
[tex]71 = int(\frac{70+72}{2})[/tex]
Ако отговорът е "надолу", смъкваме горната граница. Ако отговорът е "нагоре", вдигаме долната. Елементарно, нали!
Последната промяна е направена от voknid на Sat Dec 13, 2008 11:24 am; мнението е било променяно общо 1 път |
|
| Върнете се в началото |
|
 |
charlie_eppes Редовен
Регистриран на: 06 Dec 2007 Мнения: 207
    гласове: 16
|
Пуснато на: Fri Dec 12, 2008 8:40 pm Заглавие: |
|
|
| voknid написа: | | charlie_eppes написа: | | savage309 написа: | | charlie_eppes написа: | | Дайте пример!!! Ако да речем че числото е 71? Как ще стане работата??? |
500,250,125,63,94,78,70,74,72,71  |
Можеш ли да обясниш какво правиш след 63? |
[tex]94 = int(\frac{63+125}{2})[/tex]
[tex]78 = int(\frac{63+94}{2})[/tex]
[tex]70 = int(\frac{63+78}{2})[/tex]
[tex]74 = int(\frac{70+78}{2})[/tex]
[tex]72 = int(\frac{70+74}{2})[/tex]
[tex]71 = int(\frac{70+72}{2})[/tex]
Ако отговорът е "надолу", смъкваме горната граница. Ако отговорът е "нагоре", вдигаме долната. Елементарно, нали! |
Защо почна да събираш със 70? |
|
| Върнете се в началото |
|
 |
voknid Редовен

Регистриран на: 06 Dec 2008 Мнения: 150 Местожителство: гр. Пловдив
   гласове: 6
|
Пуснато на: Sat Dec 13, 2008 11:18 am Заглавие: |
|
|
| charlie_eppes написа: | | voknid написа: | | charlie_eppes написа: | | savage309 написа: | | charlie_eppes написа: | | Дайте пример!!! Ако да речем че числото е 71? Как ще стане работата??? |
500,250,125,63,94,78,70,74,72,71  |
Можеш ли да обясниш какво правиш след 63? |
[tex]94 = int(\frac{63+125}{2})[/tex]
[tex]78 = int(\frac{63+94}{2})[/tex]
[tex]70 = int(\frac{63+78}{2})[/tex]
[tex]74 = int(\frac{70+78}{2})[/tex]
[tex]72 = int(\frac{70+74}{2})[/tex]
[tex]71 = int(\frac{70+72}{2})[/tex]
Ако отговорът е "надолу", смъкваме горната граница. Ако отговорът е "нагоре", вдигаме долната. Елементарно, нали! |
Защо почна да събираш със 70? |
Ами като казвам 70 и ми отговорят "не, нагоре", вдигамм долната граница от 63 на 70. (70 > 63) Трябва да помня последните долна и горна граница, разбира се. |
|
| Върнете се в началото |
|
 |
charlie_eppes Редовен
Регистриран на: 06 Dec 2007 Мнения: 207
    гласове: 16
|
Пуснато на: Sat Dec 13, 2008 8:26 pm Заглавие: |
|
|
| voknid написа: | | charlie_eppes написа: | | voknid написа: | | charlie_eppes написа: | | savage309 написа: | | charlie_eppes написа: | | Дайте пример!!! Ако да речем че числото е 71? Как ще стане работата??? |
500,250,125,63,94,78,70,74,72,71  |
Можеш ли да обясниш какво правиш след 63? |
[tex]94 = int(\frac{63+125}{2})[/tex]
[tex]78 = int(\frac{63+94}{2})[/tex]
[tex]70 = int(\frac{63+78}{2})[/tex]
[tex]74 = int(\frac{70+78}{2})[/tex]
[tex]72 = int(\frac{70+74}{2})[/tex]
[tex]71 = int(\frac{70+72}{2})[/tex]
Ако отговорът е "надолу", смъкваме горната граница. Ако отговорът е "нагоре", вдигаме долната. Елементарно, нали! |
Защо почна да събираш със 70? |
Ами като казвам 70 и ми отговорят "не, нагоре", вдигамм долната граница от 63 на 70. (70 > 63) Трябва да помня последните долна и горна граница, разбира се. |
Е добре не трябва ли да познаеш числото без моя помощ!? То дет се вика и ако стане по тоя метод аз само да казвам нагоре или надолу по сто пъти ти ест. че все някога ще го познаеш. |
|
| Върнете се в началото |
|
 |
|
|
Не Можете да пускате нови теми Не Можете да отговаряте на темите Не Можете да променяте съобщенията си Не Можете да изтривате съобщенията си Не Можете да гласувате в анкети Може да прикачвате файлове Може да сваляте файлове от този форум
|
|