2010-11-25 3 views
0

Прошу вас, чтобы я был близок к тому, чтобы свободно говорить в мире математики.Вложенные комбинации - варианты, сгруппированные по нескольким вопросам

Я ищу анализ теста. Он состоит из четырех вопросов с десятью вариантами. Из каждого вопроса необходимо выбрать три варианта. Это, конечно, всегда дает в общей сложности 12 ответов.

Анализ количества возможных комбинаций с использованием Ruby's [] .combination, мои рабочие станции Dell замерзают и не дают нормальных значений. Неужели этот расчет действительно настолько интенсивный/большой?

Использование 40 вариантов более 12 ответов, я полагал, что я должен работать:

[0...39].combination(12){|x| p x } 

Я также нашел the Wikipedia article on Combination. Но, будучи инвалидом с точки зрения математики, это действительно не сделало меня более умным.

Я безумно благодарен за любую помощь, которую я могу получить по этому вопросу. Спасибо всем.

Secondary/последующий вопрос:

Plus указывает на тех, кто может выяснить, умный способ генерировать все возможные комбинации. Это необходимо для «оффлайн» Ruby-приложения, имитирующего все возможные ответы. У моего мозга головокружение от анализа документов - но я не могу найти эффективный способ достичь этой задачи.

В идеале, я должен был бы один гигантский массив, содержащий Интс, представляющие параметры выбраны:

[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]] 

... бы, например, представить ситуацию, когда вопрос один, два, три и четыре ответили, используя параметры 0, 1 и 2.

+0

Что вы пытаетесь достичь? Какую информацию вы пытаетесь выбраться из расчета? Это похоже на опрос общественного мнения или тест на множественный выбор. У вас будет 12 выбранных вариантов, но когда вы смотрите на «комбинации», вы подсчитываете, сколько способов вы можете выбрать 12 предметов из возможных 40 ... и это немало. На самом деле, это не так плохо, как я думал из-за ограничения 3 из 10. – Jaydee 2010-11-25 15:43:03

ответ

3

Код, который вы предоставили, запрашивает все способы выбора 12 вещей из 40 вещей, которые являются огромным числом (следовательно, почему ваша машина зависает), но, как вы описали свою ситуацию, я не думаю, что это правильно.

Каждый вопрос должен быть обработан отдельно, то есть, вы хотите, число способов выбрать 3 вещи из 10 вещей:

[0...9].combination(3) {|x| p x } 

напечатает все различные способы сделать так Это дает все способы ответа на один вопрос (который будет одинаковым для всех вопросов).

Это также должно работать намного быстрее, поскольку это намного меньший расчет.

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

Мой расчет дает:

120 комбинаций за вопрос.

120 * 120 * 120 * 120 = 207,360,000 комбинаций для всего теста.

+0

`40C12` не * это * огромный (это` 5 586 853 480`), но это возможно, он вычисляется наивно, что * может вызвать проблемы. Однако я согласен с вашими расчетами правильного ответа (`(10C3)^4`). – AakashM 2010-11-25 15:56:48

0

Я не уверен, но 10 возможных ответов, выбрав 4, дали бы 210 возможностей.

Затем соответствующий вопрос 1 & 2 дал бы 210 * 210 = 44.100 возможностей. С другой стороны, соответствующие вопросы 3 & 4 предоставили бы другие 44.100 возможности.

Matching 1 & 2 + 3 & 4 будет 1.944.810.000 possibilites

Это довольно много possibilites ...

Но ваша идея 12 между 40 даст большее количество , около 5.586.853.480.

Обычно происходит грубая носовая над комбинаторным это не очень хорошей идеей ...

PS: Я не уверен в правильности моих чисел ... изучал это давно

+0

Ответ Джонатана более точен (он занимает 3 из 10, а я miread и взял 4 из 10 ...) – SoulWanderer 2010-11-25 16:10:33

1

У вас есть четыре комплекта комбинаций «Выберите 3 из 10».

Пожалуйста, пожалуйста, о, пожалуйста, бог, не решайте это, на самом деле производя все возможные комбинации! Вот почему человек изобрел математику :-)

Один комплект «10 выбрать три» имеет ряд опций, равных (как показано на странице википедии вы связаны с):

10!/((10-3)! * 3!) 
= 10!/(7! * 3!) 
= (10!/7!)/3! 
= (10 * 9 * 8)/(3 * 2 * 1) 
= 720/6 
= 120 

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

120 * 120 * 120 * 120 
= 207,360,000 

... как показал Джонатан, сверху.

Смежные вопросы