Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];

Вниз

сложная задача   Найти похожие ветки 

 
race1   (2002-10-22 18:22) [0]

есть массив буленов (length=1000,length=2000) нужно узнать ВСЕ возможные комбинации истны и ложи, например,
array[0]=true, array[1]=true
array[0]=false, array[1]=false
array[0]=true, array[1]=false
array[0]=false, arrat[1]=true
и т.д.


 
han_malign   (2002-10-22 18:24) [1]

2^length


 
race1   (2002-10-22 18:32) [2]

>han_malign
мне нужно их подсчитать все и сохранить :)


 
han_malign   (2002-10-22 18:39) [3]

примерно так
....................................
var _bool: array[0..cLength-1]: boolean;
procedure Deeper(aDepth: integer);
begin
if(aDepth=cLength)then Save(_bool)
else begin
_bool[aDepth]:=true ;Deeper(aDepth+1);
_bool[aDepth]:=false;Deeper(aDepth+1);
end;
end;
begin
Deeper(0);
.......................................


 
han_malign   (2002-10-22 18:42) [4]

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


 
han_malign   (2002-10-23 09:41) [5]

Вот я вчера поймался на подколку, я тут прикинул реализацию алгоритма для 1000 элементов:

возьмем length=1000

Размер памяти для хранения:
При храннении битовой маски, длинна 1-го значения 1000/8=125 байт
2^1000=10^(1000*log10(2))~10^301.
То есть для хранения всех значений нужно 125*10^301 ~ 10^303 ~ 10^291 террабайт. Если предположить что наступило счастливое будущее и на каждого человека на земле приходится компъютер со средней емкостью 1 террабайт, то для хранения этого объема информации понадобится еще 10^291/(6*10^9)~ 10^281 подобных планет - в нашей галактике столько нет.

Время вычисления
Если предположить что сделан специальный 1000-битовый регистр, и одно значение вычисляется за один такт процессора, и что у нас 10ГГц процессор, то только на перебор значений уйдет 10^301/10^7=10^294 секунд.
Для сравнения со времени формирования Земли из газо-пылевого облака прошле меньше 10^23 секунд, так что если не успеем до тепловой смерти вселенной, есть шанс успеть до следущего большого взрыва.

З.Ы. Максимальная глубина стека в рекурсивном алгоритме 8*length (sizeof(integer)+sizeof(указатель точки возврата))
З.З.Ы. Ради разминки простейшая бинарное инкрементирование

FillChar(BoolArray,sizeof(BoolArray),0)
repeat
Save(BoolArray);//Все false
i:=0;
while((i<length(BoolArray)and BoolArray[i])do begin
BoolArray[i]:=False;
inc(i)
end;
if(i<length(BoolArray))then BoolArray[i]:=true;
until(i>=length(BoolArray));
Save(BoolArray);//Все true



 
race1   (2002-10-24 11:17) [6]

а если предположим, что длинна массива не 1000 (это всё детские шалости) а 10 000-20 000 элементов? Это вполне реальная ситуация! И мне НУЖНО все возможные истины и ложи пересчитать! :)


 
Anatoly Podgoretsky   (2002-10-24 12:24) [7]

4


 
Separator   (2002-10-24 12:47) [8]

Прикиньте у меня такая же задача была на олимпиаде 4 года назад с усложненым заданием, т.е.:
1) true true false
2) true false true
3) false true true

1 и 3 строки считались одинаковыми и такие строки не нужно было учитывать. Так что такая задача по сложности расчитана на 10 - 11 классы, во всяком случае так думают наши чиновники. Поэтому я думаю, что ты ее сможешь решить, хотя я ее тогда не решил :)


 
race1   (2002-10-24 15:25) [9]

то что чиновники оценили в 2 и 3 балла наши десятиклассники (могие, процентов 90-95) сами решить не могут; могут только решить в случае если им дать отправную точку - код, где нужно заменить одну-две переменные плюс написать одно-два новых слова... я конечно к ним не принадлежу :), но всё-таки, как мне кажется, эта задачка не такая простая....

Кстати, к вопросу об памяти, к han_malign - а если можно не сохранять все возможные варианты, а просто узнать их и обработать? Такое по ресурсам возможно?, например, посмотреть что
true true true
и поработать с ними, посмотреть что
true false true
и поработать с ними...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
1-11239
Xman
2002-10-22 11:38
2002.11.04
У меня чета никак не получается пробовал чего знал по архивам


1-11135
Cossys
2002-10-22 17:52
2002.11.04
Как отнять от даты дни


14-11413
1g0r
2002-10-14 18:42
2002.11.04
Проблема с почтовыми клиентами (Outlook)


6-11362
BAHO
2002-09-03 00:39
2002.11.04
Трафик


3-11132
Dmitrey
2002-10-16 09:11
2002.11.04
Просмотр TDataSet без фиического перемещения курсора





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский