Une question de persuasion en programmation pour tester si vous êtes apte à la programmation

avant-propos

Tout le monde sait que pour devenir un excellent ingénieur de développement, il faut de bonnes bases en mathématiques, c'est-à-dire qu'il faut avoir une forte capacité de raisonnement logique.Voici un test de raisonnement logique de l'université de Stanford aux États-Unis pour tester votre raisonnement logique. capacité. , Vous pouvez voir comment est votre capacité logique.

sujet

Il y a une loterie, il y a trois portes, une porte est une voiture et les deux autres sont des chèvres, après avoir choisi l'une des portes pour la première fois, l'hôte ouvrira l'une des deux autres portes est une porte de chèvre , Ensuite, laissez-vous refaire un choix, que ce soit pour vous en tenir au premier choix ou pour choisir de changer de portière, quelle est la probabilité de gagner une voiture en participant à cet événement ?

Voici quelques options parmi lesquelles choisir

A .1/3

B.1/2

C.1/6

D.2/3

E. 5/6

Réponse

Félicitations, vous avez choisi le bon. Vous avez bien deviné. La réponse est D. La probabilité d'être lieutenant général est de deux tiers. Il s'agit d'un simple problème de probabilité mathématique.

analyser

Tout d'abord, ce tirage de loterie comprend deux choix. Si vous regardez chaque choix séparément, la probabilité du premier général est de 1/3 et la probabilité du deuxième général est de 1/2. La clé du problème est de combiner Les deux Le deuxième choix est considéré comme un processus de calcul de la probabilité. Il convient également de noter que le résultat final est basé sur le deuxième choix. C'est-à-dire, peu importe si vous choisissez la bonne voiture pour la première fois ou non. , si la deuxième fois, S'il n'est pas sélectionné, il est inutile. Ci-dessous, nous énumérons toutes les possibilités pour les premier et deuxième choix.

la première fois

la deuxième fois

chèvre

chèvres (pas de changement)

chèvre

voiture (changement de porte)

chèvre

chèvres (pas de changement)

chèvre

voiture (changement de porte)

auto

Chèvre (interrupteur de porte)

auto

auto

On peut voir sur la figure ci-dessus que parmi tous les résultats possibles pour la première fois, la voiture est apparue deux fois et la chèvre est apparue fois 4. La probabilité de gagner la voiture au premier tirage est de 1/3. L'ouverture d'une porte nous a aidés exclure une option de chèvre. Dans la deuxième fois, toutes les voitures possibles sont apparues 3 fois et la chèvre est apparue 2 fois. La probabilité de toutes les secondes voitures sélectionnées est de 1/2. Mais jusqu'ici, nous avons compté la probabilité de changer de porte et de ne pas les changer ensemble. En supposant que nous choisissions tous de changer la porte pour la deuxième fois, toutes les possibilités qui se présentent sont présentées dans la figure ci-dessous

la première fois

la deuxième fois

chèvre

voiture (changement de porte)

chèvre

voiture (changement de porte)

auto

Chèvre (interrupteur de porte)

Comme on peut le voir sur la figure ci-dessus, parmi tous les résultats possibles, la voiture apparaît deux fois et la chèvre apparaît une fois. On peut en déduire que tant que nous choisissons des portes différentes pour la première fois et la deuxième fois, c'est-à-dire nous choisissons de changer de porte pour la deuxième fois.Gate, notre prix de probabilité de lieutenant général atteint un maximum de 2/3.

Vérifier

Ensuite, utilisez le code pour simuler, sélectionner manuellement et opérer 10 000 fois pour voir la proportion du nombre de fois dans les statistiques pour vérification.


import cn.hutool.core.util.RandomUtil;
import com.google.common.collect.Lists;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class MockDraw {

    public static void main(String[] args) {
        List<String> result=new ArrayList<>(10000);
        for (int i = 0; i < 10000; i++) {
            result.add(raffle());
        }
        Map<Object, Long> groupMap=result.stream().collect(Collectors.groupingBy(e->e,Collectors.counting()));
        System.out.println(groupMap);

    }

    private static String  raffle(){
        //三个门的编号1,2,3
        List<Integer> doors= Lists.newArrayList(1,2,3);
        //奖品选项
        List<String> prizes= Lists.newArrayList("山羊","汽车","山羊");
        //把奖品随机放到对应的门后面
        String option1=RandomUtil.randomEle(prizes);
        prizes.remove(option1);
        String option2=RandomUtil.randomEle(prizes);
        prizes.remove(option2);
        String option3=RandomUtil.randomEle(prizes);
        prizes.remove(option3);
        Map<Integer,String> map=new HashMap<>(5);
        map.put(1,option1);
        map.put(2,option2);
        map.put(3,option3);
        //第一次选择
        Integer firstSelect= RandomUtil.randomEle(doors);
        //主持人打开一扇有羊的门
        Integer open= openDoor(doors,map,firstSelect);
        //排除打开门的选项
        doors.remove(open);
        //第二次选择(换门)
        Integer second=  doors.stream().filter(e->!e.equals(firstSelect)).findFirst().get();
        return map.get(second);
    }

    private static Integer openDoor(List<Integer> doors, Map<Integer,String> map,Integer firstSelect){
        return doors.stream().filter(door->map.get(door).equals("山羊")&&!firstSelect.equals(door)).findFirst().get();
    }
}

résultat de l'opération :

模拟一万次,第二次选择,每次都换门的情况下,最终选中山羊的次数是3322次,选中汽车的次数是6678次,中将概率接近2/3。

第二次不换门,修改代码

    //第二次选择(不换门)
    Integer second=  doors.stream().filter(e->e.equals(firstSelect)).findFirst().get();

运行结果:

模拟一万次,第二次选择,每次都不换门的情况下,最终选中山羊的次数是6636次,选中汽车的次数是3364次,中将概率接近1/3。

模拟一万次,第二次随机选择会怎么样

修改代码:

        //第二次选择(随机)
        Integer second=  RandomUtil.randomEle(doors);

运行结果

模拟一万次,第二次随机选择的情况下,最终选中山羊的次数是4926次,选中汽车的次数是5074次,中将概率接近1/2。

总结

这是一道经典的概率题,所谓的概率只是个估值,只有在多次试验下,才有具有参考意义。

Je suppose que tu aimes

Origine blog.csdn.net/weixin_40986713/article/details/128725567
conseillé
Classement