AKB Forums

Go Back   AKB Forums > Technical sections > Algorithms
Home Register Blogs FAQ Members List Calendar Downloads Arcade Mark Forums Read

Algorithms The source of algorithms for your project

Troubles when posting message? Click here! :: Проблемы с отправлением сообщения? Нажмите сюда!

Reply
 
LinkBack Thread Tools Display Modes
Old Apr 19, 2004, 18:33   #1
Moderator
 
shatver's Avatar
 
Join Date: Jul 2002
Location: Yerevan
Posts: 450
Rep Power: 7
Reputation: 10
Задачка по поиску...

Есть массив из 256 значений, из которых два достоверно удовлетворяют некому условию... Узнать какие именно можно лишь подставив данные значения в это условие... требуется найти любое одно из этих двух значений... есть ли какая нибудь методика перебора(окромя простого последовательного перебора) чтоб найти одно из двух значений хотя бы не более чем за 128 проверок (если еще меньше то еще лучше ) с очень высокой долей вероятности
(80-90 %)... Или хотя бы убедиться что это невозможно..

Другой дополнительной инфы нету, типа отсортированности для бинарного поиска и т.д.
shatver is offline   Reply With Quote Quote selected
Old Apr 20, 2004, 04:38   #2
Грустно...
 
Agregat's Avatar
 
Join Date: Aug 2002
Location: Там, где всегда идут дожди
Posts: 21,546
Rep Power: 11
Reputation: 169
Send a message via ICQ to Agregat Send a message via MSN to Agregat
Чтоб я полностью осознал задачу переспрошу:
известно, что только 2 числа равны друг другу, но не извесно какие? нужно найти это число?
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!
Agregat is offline   Reply With Quote Quote selected
Old Apr 20, 2004, 06:09   #3
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: Jan 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,178
Rep Power: 7
Reputation: 45
Quote:
Originally Posted by shatver
есть ли какая нибудь методика перебора(окромя простого последовательного перебора) чтоб найти одно из двух значений хотя бы не более чем за 128 проверок (если еще меньше то еще лучше ) с очень высокой долей вероятности
(80-90 %)...
боюсь, что нет. подумаю на досуге над доказательством
Aram Hambardzumyan is offline   Reply With Quote Quote selected
Old Apr 20, 2004, 06:27   #4
Moderator
 
shatver's Avatar
 
Join Date: Jul 2002
Location: Yerevan
Posts: 450
Rep Power: 7
Reputation: 10
Quote:
Originally Posted by Agregat
Чтоб я полностью осознал задачу переспрошу:
известно, что только 2 числа равны друг другу, но не извесно какие? нужно найти это число?
Нет числа не равны друг другу..просто они удовлетворяют некому условию..проверить же это можно непосредственно подставив число в ..ну скажем в некую формулу... Не хотелось бы делать это 256 раз.. раз чисел два то хотелось бы сократить вдвое кол-во проверек...
shatver is offline   Reply With Quote Quote selected
Old Apr 20, 2004, 06:37   #5
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: Jan 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,178
Rep Power: 7
Reputation: 45
кстати, а что подразумевается под нахождением с точносьтю до 80-90%?
Aram Hambardzumyan is offline   Reply With Quote Quote selected
Old Apr 20, 2004, 07:00   #6
Грустно...
 
Agregat's Avatar
 
Join Date: Aug 2002
Location: Там, где всегда идут дожди
Posts: 21,546
Rep Power: 11
Reputation: 169
Send a message via ICQ to Agregat Send a message via MSN to Agregat
Я тоже склонен думать, что не выйдет. Разве, что можешь попробовать искать с двух сторон одновременно, что при равномерном распределение чисел по массиву может уменьшить кол проверок типа:
PHP Code:
for (int i 0128; ++i)
{
  if (
uslovie(p[i])) return p[i];
  else if (
uslovie(p[255 i])) return p[255 i];

__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!
Agregat is offline   Reply With Quote Quote selected
Old Apr 20, 2004, 07:40   #7
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: Jan 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,178
Rep Power: 7
Reputation: 45
интуиция подсказывает, что можно, не ограничивая общности, ограничиться случайной выборкой 128 элементов из данных 256. пусть нашему условию удовлетворяют элементы a и b. вероятность попадания хотя бы одного из них в нашу выборку - 75%.
Aram Hambardzumyan is offline   Reply With Quote Quote selected
Old Apr 20, 2004, 08:11   #8
Administrator
 
greka's Avatar
 
Join Date: Sep 2001
Location: @work
Posts: 5,347
Rep Power: 10
Reputation: 23
Send a message via ICQ to greka
заметка

Quote:
Originally Posted by Agregat
Я тоже склонен думать, что не выйдет. Разве, что можешь попробовать искать с двух сторон одновременно, что при равномерном распределение чисел по массиву может уменьшить кол проверок типа:
PHP Code:
for (int i 0128; ++i)
{
  if (
uslovie(p[i])) return p[i];
  else if (
uslovie(p[255 i])) return p[255 i];

при равномерном распределении не имеет значения, с какого конца ведется поиск.
Я к тому, что в данном случае "с двух концов" не увеличивает скорость поиска - всиравно в сумме делаешь 256 проверок, а не 128.

чисто технически наличие условия "if..else" в цикле сильно замедляет скорость выполнения цикла.
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/
greka is offline   Reply With Quote Quote selected
Old Apr 20, 2004, 08:25   #9
Administrator
 
greka's Avatar
 
Join Date: Sep 2001
Location: @work
Posts: 5,347
Rep Power: 10
Reputation: 23
Send a message via ICQ to greka
единственный путь для ускорения я вижу в самом условии, которое здесь было оговорено абстрактно.

т.е. исходя из него возможно сгруппировать (и/или упорядочить) данные либо перестроить цикл.
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/
greka is offline   Reply With Quote Quote selected
Old Apr 20, 2004, 13:50   #10
Moderator
 
shatver's Avatar
 
Join Date: Jul 2002
Location: Yerevan
Posts: 450
Rep Power: 7
Reputation: 10
Quote:
Originally Posted by Aram Hambardzumyan
интуиция подсказывает, что можно, не ограничивая общности, ограничиться случайной выборкой 128 элементов из данных 256. пусть нашему условию удовлетворяют элементы a и b. вероятность попадания хотя бы одного из них в нашу выборку - 75%.
75% уже неплохой результат... а как получается такая цифра?
shatver is offline   Reply With Quote Quote selected
Old Apr 20, 2004, 14:03   #11
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: Jan 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,178
Rep Power: 7
Reputation: 45
Quote:
Originally Posted by shatver
75% уже неплохой результат... а как получается такая цифра?
если случайным образом отобрать половину элементов, то вероятность того, что элемент a окажется в этой половине - 50%. вероятность того, что в данной половине окажутся оба элемента, равна 25%. если в качестве упоминаемой половины рассмотреть невыбранные 128 элементов, то получается, что мы 'промахиваемся' с вероятностью 25%, т. е. вроятность нахождения хотя бы одного элемента - 75%
Aram Hambardzumyan is offline   Reply With Quote Quote selected
Old Apr 20, 2004, 15:42   #12
Moderator
 
shatver's Avatar
 
Join Date: Jul 2002
Location: Yerevan
Posts: 450
Rep Power: 7
Reputation: 10
И правда же... совсем мозги заржавели... фактически нужно каждый раз случайным образом выбирать 128 элементов... а если выбрать 192 то и за все 90% переходит... но 192 это много...

Вообщем все ясно.. Всем спасибо..
shatver is offline   Reply With Quote Quote selected
Old Apr 20, 2004, 17:59   #13
ЙЦУКЕН
 
Join Date: Jul 2002
Location: 0x68,0x69,0x72, 0x69,0x6e,0x67, 0x20,0x6e,0x6f, 0x77
Posts: 3,114
Rep Power: 7
Reputation: 10
Send a message via ICQ to nm
Quote:
Originally Posted by Aram Hambardzumyan
если случайным образом отобрать половину элементов

считай, что _случайным_ образом я выбрались первые 128 элелемтов ))) почтому слово случайный -- выкидываем )))

так что я бы предложил другой алгоритм - просто идти с начала и проверять. если попал на ответ - хорошо, выходим из цикла, если нет -идем дальше
в среднем у тебя будет 64 итерации на каждый поиск.
вероятность того, что ты сделаешь 253 проверки -1/(253*254), если я все правильно понимаю )))

если у тебя есть возможность оценивать _хорошесть_(ты имешь какую-то оценочную функцию) ответа - то стоит запоминать позицию и значение этой функции. если ты прошел первые N элементов и не нашел искомого значения -- то тогда просто прерываешь поиск и возвращаешь _хороший_ результат. в принципе это актуально для задач реального времени, когда важно найти результат в заданый промежуток времени и приемлемо, если он будет не совсем точным.
nm is offline   Reply With Quote Quote selected
Old Apr 20, 2004, 18:06   #14
Moderator
 
shatver's Avatar
 
Join Date: Jul 2002
Location: Yerevan
Posts: 450
Rep Power: 7
Reputation: 10
а 64 итерации откуда?
а слово случайный выкидывать не надо.. потому как условие все время меняется..а значит и пары цифр удовлетворяюшие ему...
Ведь то что условие неизвестно, не означает что оно не подчинено определенной логике...и вполне может сказаться что постоянный выбор первых 128 цифр и есть худший вариант... А выбирая каждый раз случайным образом можно эту логику перебить и иметь в среднем эти 75% ...
shatver is offline   Reply With Quote Quote selected
Old Apr 20, 2004, 18:47   #15
ЙЦУКЕН
 
Join Date: Jul 2002
Location: 0x68,0x69,0x72, 0x69,0x6e,0x67, 0x20,0x6e,0x6f, 0x77
Posts: 3,114
Rep Power: 7
Reputation: 10
Send a message via ICQ to nm
Quote:
Originally Posted by shatver
а 64 итерации откуда?
а слово случайный выкидывать не надо.. потому как условие все время меняется..а значит и пары цифр удовлетворяюшие ему...
Ведь то что условие неизвестно, не означает что оно не подчинено определенной логике...и вполне может сказаться что постоянный выбор первых 128 цифр и есть худший вариант... А выбирая каждый раз случайным образом можно эту логику перебить и иметь в среднем эти 75% ...
так. условие насколько сложное ?? ))) я к тому, что генерация _случайного_ числа и выборка _неповторяющегося_ _случайного_ индекса -- задача довольно трудоемкая )))

64 итерации -- если у тебя ответы распределены равномерно по всем 256 индексам, тогда получается след. вариант:
вероятность того, что мы нашли ответ в N-ной итерации -

1/256 /* первое число может быть в любой из N позиций */ x
(255-N)/255 /* второе число должно быть в позиции больше , чем N */ x
2 /* у нас нет _первого_ и _второго_ числа, у нас есть просто число, которое надо найти, т.е. задача симметрична */

вот .... и при помощи простой арифметики получаем, что сумма таких вот вероятностей для N=0 по N=64 получается около 0.45 .... тааак что-то в формуле не так, но вобщем результат имхо именно такой должен быть - за 64 итерации ты с вероятностью 1/2 находишь искомый ответ.

ндя. я уже даже как-то засомневалсь, в том что написал ))) но все-таки мне кажется, именно так, а не иначе
nm is offline   Reply With Quote Quote selected
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
задачка на тему Самолет mk General 186 Dec 23, 2004 16:07
Задачка Shirinyan Fun 13 Oct 22, 2003 13:41
Задачка от Альберта, самого Энштейна R0nIn General 34 Aug 19, 2003 19:24
Еще одна задачка Agregat Languages, Compilers and Interpreters 15 Oct 8, 2002 19:22
Задачка Amph Algorithms 1 May 29, 2002 04:02


All times are GMT. The time now is 00:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
This board was founded on September 29, 2001
Powered by Viper Internet

Affordable Web Hosting | ParevNet

Buy text link