稳定伴侣问题

问提描述:
有n个男孩m1,m2,…,mn 与n 个女孩w1,w2,wn。每一个男孩mi 都依照喜爱这n个女孩的程度列成一张表,最喜欢的女孩排在第1 位,最不喜爱的女孩排在第n 位;同样地,每一个女孩wi 也依照她喜爱n 个男孩的程度列成一张表。请写一个程序,把每一个男孩与女孩的喜爱表格读入,并且把男孩与女孩一一配对,使得:如果mp 与wq 是一对的话,那么,第一:对mp 的喜爱表格中排在wq 之前的女孩而言,她的伴侣在她的表格中一定排在mp 之前;第二:对wq 的喜爱表格中排在mp 之前的男孩而言,他的伴侣在他的表格中一定排在wq 之前。这就是稳定伴侣(Stable Marriage)问题。


解决这个问题的主要思想是男孩要不断向女孩表白,女孩决定接受哪个男孩。
第一轮,所有没有对象的男孩各自向自己心目中最喜欢的女孩表白,当男孩表白完之后女孩开始选择男孩,第一轮所有女孩都还没有对象,所以女孩所要做的事就是在所有向自己表白的男孩中选择自己最喜欢的做自己的伴侣就行了,但是这个伴侣只是暂时的。女孩选择完伴侣,第一轮结束,可能有两种情况:

  1. 所有男孩都有了对象,说明第一次就正好配对成功,结束程序。每个男孩最喜欢的女孩也最喜欢这个男孩。这简直是太完美了,不过这种情况出现的概率极小。
  2. 第二种就是有的男孩被拒绝了,有的女孩还没有被表白。这时候就要继续第一轮的过程:所有还没有对象的男孩在所有还没有拒绝他的女孩中选择最喜欢的一位向她表白;男孩表白完,所有女孩无论有没有对象,都要在所有向他表白的男孩中选择最喜欢的一个做自己的伴侣,如果女孩有伴侣,那么他就要放弃当前的伴侣,这样的话之前有对象的男孩可能又会变成单身。如此循环,只要还有男孩没有对象,就继续该过程,直到所有男孩都有对象了,就说明配对成功了,此时的组合即是最稳定组合,也就是说,即便女孩找到一个比自己当前伴侣更好的男孩,女孩在男孩心中却不如自己当前的伴侣,这样劈腿就不能成功了,也就是组合是稳定

主要参考算法:Gale-Shapley算法


java代码如下
package stabalpartner;

/**
 * Created by yeqf on 5/25/15.
 */
public class StablePartner {
    public static void main(String[] args) {
        Boy[] boys = new Boy[4];
        boys[0] = new Boy(2, 3, 1, 0);
        boys[1] = new Boy(2, 1, 3, 0);
        boys[2] = new Boy(0, 2, 3, 1);
        boys[3] = new Boy(1, 3, 2, 0);
        Girl[] girls = new Girl[4];
        girls[0] = new Girl(0, 3, 2, 1);
        girls[1] = new Girl(0, 1, 2, 3);
        girls[2] = new Girl(0, 2, 3, 1);
        girls[3] = new Girl(1, 0, 3, 2);

        boolean flag = true;

        while (flag) {
            for (int i = 0; i < 4; i++) {
                Boy boy = boys[i];
                if (!boy.hasPart()) {       //如果男孩没有伴侣
                    for (int j = 0; j < 4; j++) {
                        int girlId = boy.getGirlFromOrd(j).getId();     //得到该男孩心中排名为j的女孩的id
                        if (!boy.getGirlFromOrd(j).getIsRefused()) {    //如果这个女孩没有拒绝过男孩
                            girls[girlId].getBoyFromId(i).setIsAspired(true);   //男孩向女孩表白
                            break;
                        }
                    }
                }
            }

            for (int i = 0; i < 4; i++) {
                Girl girl = girls[i];
                for (int j = 0; j < 4; j++) {
                    if (girl.getBoyFromOrd(j).getAspired()) {       //如果该男孩向女孩表过白
                        //拒绝排名在该男孩后面的所有向该女孩表白的男孩
                        for (int k = j + 1; k < 4; k++) {
                            if (girl.getBoyFromOrd(k).getAspired()) {
                                int boyId = girl.getBoyFromOrd(k).getId();
                                boys[boyId].getGirlFromId(i).setIsRefused(true);
                                //如果男孩是该女孩的当前伴侣,则放弃该男孩,并把该男孩设置为单身
                                if (girl.getPartner() == boyId) {
                                    boys[boyId].setPartner(-1);
                                }
                            }
                        }
                        girl.setPartner(girl.getBoyFromOrd(j).getId());     //女孩接受所有表白者中排名最高的男孩
                        boys[girl.getBoyFromOrd(j).getId()].setPartner(i);  //并把男孩的伴侣设置为该女孩
                        break;
                    }
                }
            }
            if (boys[0].hasPart() && boys[1].hasPart() && boys[2].hasPart() && boys[3].hasPart()) {
                flag = false;
            }
        }

        for (int i = 0; i < 4; i++) {
            System.out.println("boy " + i + " de partner is "
                    + "girl " + boys[i].getPartner());
        }
    }

    private static class Boy {
        private GirlList[] girlLists = new GirlList[4];
        private int partner = -1;

        private class GirlList {
            private boolean isRefused = false;
            private int id;

            public GirlList(int id) {
                this.id = id;
            }

            public void setIsRefused(boolean flag) {
                isRefused = flag;
            }

            public boolean getIsRefused() {
                return isRefused;
            }

            public int getId() {
                return id;
            }
        }

        public Boy(int a, int b, int c, int d) {
            girlLists[0] = new GirlList(a);
            girlLists[1] = new GirlList(b);
            girlLists[2] = new GirlList(c);
            girlLists[3] = new GirlList(d);
        }

        public int getPartner() {
            return partner;
        }

        public void setPartner(int partner) {
            this.partner = partner;
        }

        public boolean hasPart() {
            if (partner == -1) {
                return false;
            }
            return true;
        }

        public GirlList getGirlFromOrd(int order) {
            return girlLists[order];
        }

        public GirlList getGirlFromId(int id) {
            int ord = 0;
            while (girlLists[ord].getId() != id) {
                ord++;
            }
            return girlLists[ord];
        }
    }

    private static class Girl {
        private BoyList[] boyLists = new BoyList[4];
        private int partner = -1;

        private class BoyList {
            private boolean isAspired = false;
            private int id;

            public BoyList(int id) {
                this.id = id;
            }

            public void setIsAspired(boolean flag) {
                this.isAspired = flag;
            }

            public boolean getAspired() {
                return isAspired;
            }

            public int getId() {
                return id;
            }
        }

        public Girl(int a, int b, int c, int d) {
            boyLists[0] = new BoyList(a);
            boyLists[1] = new BoyList(b);
            boyLists[2] = new BoyList(c);
            boyLists[3] = new BoyList(d);
        }

        public int getPartner() {
            return partner;
        }

        public void setPartner(int partner) {
            this.partner = partner;
        }

        public boolean hasPart() {
            if (partner == -1) {
                return false;
            }
            return true;
        }

        public BoyList getBoyFromOrd(int ord) {
            return boyLists[ord];
        }

        public BoyList getBoyFromId(int id) {
            int ord = 0;
            while (boyLists[ord].getId() != id) {
                ord++;
            }
            return boyLists[ord];
        }
    }
}

作者:yeqf911

时间:2015/5/28

generated by haroopad

:first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0,.1);border-radius:3px}iframe{border:0}figure{-webkit-margin-before:0;-webkit-margin-after:0;-webkit-margin-start:0;-webkit-margin-end:0}kbd{border:1px solid #aaa;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:1px 2px 2px #ddd;-webkit-box-shadow:1px 2px 2px #ddd;box-shadow:1px 2px 2px #ddd;background-color:#f9f9f9;background-image:-moz-linear-gradient(top,#eee,#f9f9f9,#eee);background-image:-o-linear-gradient(top,#eee,#f9f9f9,#eee);background-image:-webkit-linear-gradient(top,#eee,#f9f9f9,#eee);background-image:linear-gradient(top,#eee,#f9f9f9,#eee);padding:1px 3px;font-family:inherit;font-size:.85em}.oembeded .oembed_photo{display:inline-block}img[data-echo]{margin:25px 0;width:100px;height:100px;background:url(../img/ajax.gif) center center no-repeat #fff}.spinner{display:inline-block;width:10px;height:10px;margin-bottom:-.1em;border:2px solid rgba(0,0,0,.5);border-top-color:transparent;border-radius:100%;-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}.spinner:after{content:‘‘;display:block;width:0;height:0;position:absolute;top:-6px;left:0;border:4px solid transparent;border-bottom-color:rgba(0,0,0,.5);-webkit-transform:rotate(45deg);transform:rotate(45deg)}@-webkit-keyframes spin{to{-webkit-transform:rotate(360deg)}}@keyframes spin{to{transform:rotate(360deg)}}p.toc{margin:0!important}p.toc ul{padding-left:10px}p.toc>ul{padding:10px;margin:0 10px;display:inline-block;border:1px solid #ededed;border-radius:5px}p.toc li,p.toc ul{list-style-type:none}p.toc li{width:100%;padding:0;overflow:hidden}p.toc li a::after{content:"."}p.toc li a:before{content:"? "}p.toc h5{text-transform:uppercase}p.toc .title{float:left;padding-right:3px}p.toc .number{margin:0;float:right;padding-left:3px;background:#fff;display:none}input.task-list-item{margin-left:-1.62em}.markdown{font-family:"Hiragino Sans GB","Microsoft YaHei",STHeiti,SimSun,"Lucida Grande","Lucida Sans Unicode","Lucida Sans",‘Segoe UI‘,AppleSDGothicNeo-Medium,‘Malgun Gothic‘,Verdana,Tahoma,sans-serif;padding:20px}.markdown a{text-decoration:none;vertical-align:baseline}.markdown a:hover{text-decoration:underline}.markdown h1{font-size:2.2em;font-weight:700;margin:1.5em 0 1em}.markdown h2{font-size:1.8em;font-weight:700;margin:1.275em 0 .85em}.markdown h3{font-size:1.6em;font-weight:700;margin:1.125em 0 .75em}.markdown h4{font-size:1.4em;font-weight:700;margin:.99em 0 .66em}.markdown h5{font-size:1.2em;font-weight:700;margin:.855em 0 .57em}.markdown h6{font-size:1em;font-weight:700;margin:.75em 0 .5em}.markdown h1+p,.markdown h1:first-child,.markdown h2+p,.markdown h2:first-child,.markdown h3+p,.markdown h3:first-child,.markdown h4+p,.markdown h4:first-child,.markdown h5+p,.markdown h5:first-child,.markdown h6+p,.markdown h6:first-child{margin-top:0}.markdown hr{border:1px solid #ccc}.markdown p{margin:1em 0;word-wrap:break-word}.markdown ol{list-style-type:decimal}.markdown li{display:list-item;line-height:1.4em}.markdown blockquote{margin:1em 20px}.markdown blockquote>:first-child{margin-top:0}.markdown blockquote>:last-child{margin-bottom:0}.markdown blockquote cite:before{content:‘\2014 \00A0‘}.markdown .code{border-radius:3px;word-wrap:break-word}.markdown pre{border-radius:3px;word-wrap:break-word;border:1px solid #ccc;overflow:auto;padding:.5em}.markdown pre code{border:0;display:block}.markdown pre>code{font-family:Consolas,Inconsolata,Courier,monospace;font-weight:700;white-space:pre;margin:0}.markdown code{border-radius:3px;word-wrap:break-word;border:1px solid #ccc;padding:0 5px;margin:0 2px}.markdown img{max-width:100%}.markdown mark{color:#000;background-color:#fcf8e3}.markdown table{padding:0;border-collapse:collapse;border-spacing:0;margin-bottom:16px}.markdown table tr td,.markdown table tr th{border:1px solid #ccc;margin:0;padding:6px 13px}.markdown table tr th{font-weight:700}.markdown table tr th>:first-child{margin-top:0}.markdown table tr th>:last-child{margin-bottom:0}.markdown table tr td>:first-child{margin-top:0}.markdown table tr td>:last-child{margin-bottom:0}@import url(http://fonts.googleapis.com/css?family=Roboto+Condensed:300italic,400italic,700italic,400,300,700);.haroopad{padding:20px;color:#222;font-size:15px;font-family:"Roboto Condensed",Tauri,"Hiragino Sans GB","Microsoft YaHei",STHeiti,SimSun,"Lucida Grande","Lucida Sans Unicode","Lucida Sans",‘Segoe UI‘,AppleSDGothicNeo-Medium,‘Malgun Gothic‘,Verdana,Tahoma,sans-serif;background:#fff;line-height:1.6;-webkit-font-smoothing:antialiased}.haroopad a{color:#3269a0}.haroopad a:hover{color:#4183c4}.haroopad h2{border-bottom:1px solid #e6e6e6}.haroopad h6{color:#777}.haroopad hr{border:1px solid #e6e6e6}.haroopad blockquote>code,.haroopad h1>code,.haroopad h2>code,.haroopad h3>code,.haroopad h4>code,.haroopad h5>code,.haroopad h6>code,.haroopad li>code,.haroopad p>code,.haroopad td>code{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:85%;background-color:rgba(0,0,0,.02);padding:.2em .5em;border:1px solid #efefef}.haroopad pre>code{font-size:1em;letter-spacing:-1px;font-weight:700}.haroopad blockquote{border-left:4px solid #e6e6e6;padding:0 15px;color:#777}.haroopad table{background-color:#fafafa}.haroopad table tr td,.haroopad table tr th{border:1px solid #e6e6e6}.haroopad table tr:nth-child(2n){background-color:#f2f2f2}.hljs{display:block;overflow-x:auto;padding:.5em;background:#fdf6e3;color:#657b83;-webkit-text-size-adjust:none}.diff .hljs-header,.hljs-comment,.hljs-doctype,.hljs-javadoc,.hljs-pi,.lisp .hljs-string{color:#93a1a1}.css .hljs-tag,.hljs-addition,.hljs-keyword,.hljs-request,.hljs-status,.hljs-winutils,.method,.nginx .hljs-title{color:#859900}.hljs-command,.hljs-dartdoc,.hljs-hexcolor,.hljs-link_url,.hljs-number,.hljs-phpdoc,.hljs-regexp,.hljs-rules .hljs-value,.hljs-string,.hljs-tag .hljs-value,.tex .hljs-formula{color:#2aa198}.css .hljs-function,.hljs-built_in,.hljs-chunk,.hljs-decorator,.hljs-id,.hljs-identifier,.hljs-localvars,.hljs-title,.vhdl .hljs-literal{color:#268bd2}.hljs-attribute,.hljs-class .hljs-title,.hljs-constant,.hljs-link_reference,.hljs-parent,.hljs-type,.hljs-variable,.lisp .hljs-body,.smalltalk .hljs-number{color:#b58900}.css .hljs-pseudo,.diff .hljs-change,.hljs-attr_selector,.hljs-cdata,.hljs-header,.hljs-pragma,.hljs-preprocessor,.hljs-preprocessor .hljs-keyword,.hljs-shebang,.hljs-special,.hljs-subst,.hljs-symbol,.hljs-symbol .hljs-string{color:#cb4b16}.hljs-deletion,.hljs-important{color:#dc322f}.hljs-link_label{color:#6c71c4}.tex .hljs-formula{background:#eee8d5}.MathJax_Hover_Frame{border-radius:.25em;-webkit-border-radius:.25em;-moz-border-radius:.25em;-khtml-border-radius:.25em;box-shadow:0 0 15px #83A;-webkit-box-shadow:0 0 15px #83A;-moz-box-shadow:0 0 15px #83A;-khtml-box-shadow:0 0 15px #83A;border:1px solid #A6D!important;display:inline-block;position:absolute}.MathJax_Hover_Arrow{position:absolute;width:15px;height:11px;cursor:pointer}#MathJax_About{position:fixed;left:50%;width:auto;text-align:center;border:3px outset;padding:1em 2em;background-color:#DDD;color:#000;cursor:default;font-family:message-box;font-size:120%;font-style:normal;text-indent:0;text-transform:none;line-height:normal;letter-spacing:normal;word-spacing:normal;word-wrap:normal;white-space:nowrap;float:none;z-index:201;border-radius:15px;-webkit-border-radius:15px;-moz-border-radius:15px;-khtml-border-radius:15px;box-shadow:0 10px 20px gray;-webkit-box-shadow:0 10px 20px gray;-moz-box-shadow:0 10px 20px gray;-khtml-box-shadow:0 10px 20px gray;filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color=‘gray‘, Positive=‘true‘)}.MathJax_Menu{position:absolute;background-color:#fff;color:#000;width:auto;padding:2px;border:1px solid #CCC;margin:0;cursor:default;font:menu;text-align:left;text-indent:0;text-transform:none;line-height:normal;letter-spacing:normal;word-spacing:normal;word-wrap:normal;white-space:nowrap;float:none;z-index:201;box-shadow:0 10px 20px gray;-webkit-box-shadow:0 10px 20px gray;-moz-box-shadow:0 10px 20px gray;-khtml-box-shadow:0 10px 20px gray;filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color=‘gray‘, Positive=‘true‘)}.MathJax_MenuItem{padding:2px 2em;background:0 0}.MathJax_MenuArrow{position:absolute;right:.5em;color:#666}.MathJax_MenuActive .MathJax_MenuArrow{color:#fff}.MathJax_MenuArrow.RTL{left:.5em;right:auto}.MathJax_MenuCheck{position:absolute;left:.7em}.MathJax_MenuCheck.RTL{right:.7em;left:auto}.MathJax_MenuRadioCheck{position:absolute;left:1em}.MathJax_MenuRadioCheck.RTL{right:1em;left:auto}.MathJax_MenuLabel{padding:2px 2em 4px 1.33em;font-style:italic}.MathJax_MenuRule{border-top:1px solid #CCC;margin:4px 1px 0}.MathJax_MenuDisabled{color:GrayText}.MathJax_MenuActive{background-color:Highlight;color:HighlightText}.MathJax_Menu_Close{position:absolute;width:31px;height:31px;top:-15px;left:-15px}#MathJax_Zoom{position:absolute;background-color:#F0F0F0;overflow:auto;display:block;z-index:301;padding:.5em;border:1px solid #000;margin:0;font-weight:400;font-style:normal;text-align:left;text-indent:0;text-transform:none;line-height:normal;letter-spacing:normal;word-spacing:normal;word-wrap:normal;white-space:nowrap;float:none;box-shadow:5px 5px 15px #AAA;-webkit-box-shadow:5px 5px 15px #AAA;-moz-box-shadow:5px 5px 15px #AAA;-khtml-box-shadow:5px 5px 15px #AAA;filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color=‘gray‘, Positive=‘true‘)}#MathJax_ZoomOverlay{position:absolute;left:0;top:0;z-index:300;display:inline-block;width:100%;height:100%;border:0;padding:0;margin:0;background-color:#fff;opacity:0;filter:alpha(opacity=0)}#MathJax_ZoomFrame{position:relative;display:inline-block;height:0;width:0}#MathJax_ZoomEventTrap{position:absolute;left:0;top:0;z-index:302;display:inline-block;border:0;padding:0;margin:0;background-color:#fff;opacity:0;filter:alpha(opacity=0)}.MathJax_Preview{color:#888}#MathJax_Message{position:fixed;left:1px;bottom:2px;background-color:#E6E6E6;border:1px solid #959595;margin:0;padding:2px 8px;z-index:102;color:#000;font-size:80%;width:auto;white-space:nowrap}#MathJax_MSIE_Frame{position:absolute;top:0;left:0;width:0;z-index:101;border:0;margin:0;padding:0}.MathJax_Error{color:#C00;font-style:italic}.MathJax_Display{text-align:center;margin:1em 0;position:relative;display:block!important;text-indent:0;max-width:none;max-height:none;min-width:0;min-height:0;width:100%}.MathJax .merror{background-color:#FF8;color:#C00;border:1px solid #C00;padding:1px 3px;font-style:normal;font-size:90%}.MathJax .MJX-monospace{font-family:monospace}.MathJax .MJX-sans-serif{font-family:sans-serif}#MathJax_Tooltip{background-color:InfoBackground;color:InfoText;border:1px solid #000;box-shadow:2px 2px 5px #AAA;-webkit-box-shadow:2px 2px 5px #AAA;-moz-box-shadow:2px 2px 5px #AAA;-khtml-box-shadow:2px 2px 5px #AAA;filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color=‘gray‘, Positive=‘true‘);padding:3px 4px;z-index:401;position:absolute;left:0;top:0;width:auto;height:auto;display:none}.MathJax{display:inline;font-style:normal;font-weight:400;line-height:normal;font-size:100%;font-size-adjust:none;text-indent:0;text-align:left;text-transform:none;letter-spacing:normal;word-spacing:normal;word-wrap:normal;white-space:nowrap;float:none;direction:ltr;max-width:none;max-height:none;min-width:0;min-height:0;border:0;padding:0;margin:0}.MathJax a,.MathJax img,.MathJax nobr{border:0;padding:0;margin:0;max-width:5000em;max-height:5000em;min-width:0;min-height:0;vertical-align:0;line-height:normal;text-decoration:none}img.MathJax_strut{border:0!important;padding:0!important;margin:0!important;vertical-align:0!important}.MathJax span{display:inline;position:static;border:0;padding:0;margin:0;vertical-align:0;line-height:normal;text-decoration:none}.MathJax nobr{white-space:nowrap!important}.MathJax img{display:inline!important;float:none!important}.MathJax *{transition:none;-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none}.MathJax_Processing{visibility:hidden;position:fixed;width:0;height:0;overflow:hidden}.MathJax_Processed{display:none!important}.MathJax_ExBox{display:block!important;overflow:hidden;width:1px;height:60ex;min-height:0;max-height:none}.MathJax .MathJax_EmBox{display:block!important;overflow:hidden;width:1px;height:60em;min-height:0;max-height:none}.MathJax .MathJax_HitBox{cursor:text;background:#fff;opacity:0;filter:alpha(opacity=0)}#MathJax_Tooltip *,.MathJax .MathJax_HitBox *{filter:none;opacity:1;background:0 0}@font-face{font-family:MathJax_Main;src:url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Main-Regular.woff?rev=2.4-beta-2) format(‘woff‘),url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/otf/MathJax_Main-Regular.otf?rev=2.4-beta-2) format(‘opentype‘)}@font-face{font-family:MathJax_Main;src:url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Main-Bold.woff?rev=2.4-beta-2) format(‘woff‘),url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/otf/MathJax_Main-Bold.otf?rev=2.4-beta-2) format(‘opentype‘);font-weight:700}@font-face{font-family:MathJax_Main;src:url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Main-Italic.woff?rev=2.4-beta-2) format(‘woff‘),url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/otf/MathJax_Main-Italic.otf?rev=2.4-beta-2) format(‘opentype‘);font-style:italic}@font-face{font-family:MathJax_Math;src:url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Math-Italic.woff?rev=2.4-beta-2) format(‘woff‘),url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/otf/MathJax_Math-Italic.otf?rev=2.4-beta-2) format(‘opentype‘);font-style:italic}@font-face{font-family:MathJax_Caligraphic;src:url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Caligraphic-Regular.woff?rev=2.4-beta-2) format(‘woff‘),url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/otf/MathJax_Caligraphic-Regular.otf?rev=2.4-beta-2) format(‘opentype‘)}@font-face{font-family:MathJax_Size1;src:url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size1-Regular.woff?rev=2.4-beta-2) format(‘woff‘),url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/otf/MathJax_Size1-Regular.otf?rev=2.4-beta-2) format(‘opentype‘)}@font-face{font-family:MathJax_Size2;src:url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size2-Regular.woff?rev=2.4-beta-2) format(‘woff‘),url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/otf/MathJax_Size2-Regular.otf?rev=2.4-beta-2) format(‘opentype‘)}@font-face{font-family:MathJax_Size3;src:url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size3-Regular.woff?rev=2.4-beta-2) format(‘woff‘),url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/otf/MathJax_Size3-Regular.otf?rev=2.4-beta-2) format(‘opentype‘)}@font-face{font-family:MathJax_Size4;src:url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size4-Regular.woff?rev=2.4-beta-2) format(‘woff‘),url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/otf/MathJax_Size4-Regular.otf?rev=2.4-beta-2) format(‘opentype‘)}.MathJax .noError{font-size:90%;text-align:left;color:#000;padding:1px 3px;border:1px solid}@font-face{font-family:MathJax_AMS;src:url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_AMS-Regular.woff?rev=2.4-beta-2) format(‘woff‘),url(file:///C:/Users/yeqf/AppData/Roaming/Haroo%20Studio/Haroopad/Libraries/.js/MathJax/fonts/HTML-CSS/TeX/otf/MathJax_AMS-Regular.otf?rev=2.4-beta-2) format(‘opentype‘)}footer{position:fixed;font-size:.8em;text-align:right;bottom:0;margin-left:-25px;height:20px;width:100%}
-->

时间: 2024-10-08 01:59:52

稳定伴侣问题的相关文章

c语言练习题一道——稳定伴侣

/*有n 个男孩m1,m2,…,mn 与n 个女孩w1,w2,wn.每一个男孩mi 都依照喜爱这n个女孩的程度列成一张表,最喜欢的女孩排在第1 位,最不喜爱的女孩排在第n 位:同样地,每一个女孩wi 也依照她喜爱n 个男孩的程度列成一张表.请写一个程序,把每一个男孩与女孩的喜爱表格读入,并且把男孩与女孩一一配对,使得:如果mp 与wq 是一对的话,那么第一:对mp 的喜爱表格中排在wq 之前的女孩而言,她的伴侣在她的表格中一定排在mp 之前:第二:对wq 的喜爱表格中排在mp 之前的男孩而言,他

简单的稳定婚姻匹配

一.相关的定义 1.有一个男士集合和一个女士集合.每个男士都有一个优先级列表,把女士按潜在结婚对象进行优先级排序. 同样的,女士也有一个对潜在结婚对象的优先级列表. 婚姻匹配: 一个婚姻匹配M是一个包含n个(m,w)对的集合,每一对的成员都按照一对一的模式从两个不相交的n元素集合Y和X中选出.也就是说,Y中的每个男士m都只和X中的一位女士w配对,反正亦然.相当于一个二分图中,边来连接可能结婚的对象,两边的顶点代表X和Y,婚姻匹配也是图中的一个完美匹配. 婚姻的稳定:如果在匹配M中,,男士m和女士

POJ3487[稳定婚姻]

The Stable Marriage Problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2974 Accepted: 1267 Description The stable marriage problem consists of matching members of two different sets according to the member’s preferences for the other

稳定婚姻问题和Gale-Shapley算法(转)

什么是算法?每当有人问作者这样的问题时,他总会引用这个例子:假如你是一个媒人,有若干个单身男子登门求助,还有同样多的单身女子也前来征婚.如果你已经知道这些女孩儿在每个男孩儿心目中的排名,以及男孩儿们在每个女孩儿心中的排名,你应该怎样为他们牵线配对呢? 最好的配对方案当然是,每个人的另一半正好都是自己的“第一选择”.这虽然很完美,但绝大多数情况下都不可能实现.比方说,男1号最喜欢的是女1号,而女1号的最爱不是男1号,这两个人的最佳选择就不可能被同时满足.如果好几个男孩儿最喜欢的都是同一个女孩儿,这

人生中十个重要的健康伴侣

伴侣一:菠菜不贫血:菠菜中富含铁,铁是人体造血原料之一,是女性经期时的好食品.经常吃菠菜的人面色红润.光彩照人,可远离缺铁性贫血. 体质强:菠菜中含有可观的蛋白质,可帮助身体发育,精力旺盛. 皮肤好:维生素K,这是很多蔬菜水果中缺乏的.人的头发光亮,皮肤白净有光泽,不仅需要维生素A.B.C,也少不了维生素K. 排毒:菠菜可以清理人体肠胃里的热毒,避免便秘,保持排泄的通畅.且菠菜的热量很低,常吃也不用担心发胖. 保护视力:我们知道缺乏维生素A会导致眼睛干涩.看东西"模糊".菠菜中的胡萝卜

【转】稳定婚姻问题(Stable Marriage Problem)

转自http://www.cnblogs.com/drizzlecrj/archive/2008/09/12/1290176.html 稳定婚姻是组合数学里面的一个问题. 问题大概是这样:有一个社团里有n个女生和n个男生,每位女生按照她的偏爱程度将男生排序,同时每位男生也按照自己的偏爱程度将女生排序.然后将这n个女生和n个男生配成完备婚姻. 如果存在两位女生A和B,两位男生a和b,使得A和a结婚,B和b结婚,但是A更偏爱b而不是a,b更偏爱A而不是B,则这个婚姻就是不稳定的,A和b可能背着别人相

浅谈稳定完备婚姻的算法

首先说明:本文不是讨论婚姻问题的,而是一篇以日常生活的婚姻问题为例子说明一个有趣的算法:Gale-Shapley算法(延迟认可算法),如果你为此感到失望的话,我将表示我的歉意,但是你如果有兴趣的话,还是建议你看一下,尤其是对于目前还没有个GF或BF的朋友以及就要结婚的朋友,在讲解算法的实现过程中,你会感到大有裨益. 话说在1962年,两个数学家David Gale 和Lloyd Shapely提出了下面的问题:给定若干个男生和同样多的女生,他们每个人都对所有的异性有一个心理的偏好次序.是否存在一

稳定婚姻模型

原文地址:https://blog.csdn.net/qq_33913037/article/details/71328099 假如你是一个媒人,有若干个单身男子登门求助,还有同样多的单身女子也前来征婚.如果你已经知道这些女孩在每个男人心目中的排名,以及男孩们在每个女孩心中的排名(1),你应该怎样为他们牵线配对呢? 最好的配对方案当然是,每个人的另一半正好都是自己的"第一选择".这虽然很完美,但绝大多数情况下都不可能实现.比方说,男 1 号的最爱是女 1 号,而女 1 号的最爱不是男

稳定匹配 - Stable Matching

这篇文章将会对稳定匹配算法进行介绍及Python代码的实现,第一部分会针对稳定匹配的Gale-Shapley算法进行解析,第二部分就是用Python对该算法进行实现. 一.稳定匹配算法原理 1.1 介绍 稳定匹配(Stable Matching)问题就是假设现在有N个男生和N个女生跳舞选择伴侣,然后最开始的时候男.女生按照下面情况对彼此进行排序选择舞伴(见图1): 每个男生都对女生按照最喜欢到最不喜欢进行排序: 同样的,女生也是按照最喜欢的到最不喜欢对男生进行排序. 算法目标:每个男都找到唯一一