• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

php盖尔-沙普利算法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

c# 下的代码:https://www.cnblogs.com/aitong/p/10973774.html

 

<?php

class People
{
    public $id;
    public $partnerid;
    public $satisfaction;
    public $reqArray;

    function __construct($myID)
    {
        $this->id = $myID;
        $this->partnerid = -1;
    }

    function isMarried()
    {
        if ($this->partnerid >= 0) {
            return true;
        } else {
            return false;
        }
    }

    function getSatisfaction()
    {
        $num = count($this->reqArray);
        $index = array_search($this->partnerid, $this->reqArray);
        $sa = ($num - $index)/$num;
        return $sa;
    }

    function initRequestList($num)
    {
        $this->reqArray = range(0, $num - 1);
        shuffle($this->reqArray);
    }
}

class Male extends People
{
    private $reqIndex;

    function __construct($myID)
    {
        parent::__construct($myID);
        $this->reqIndex = 0;
    }

    function request($femaleArray)
    {
        if ($this->isMarried()) {
            return true;
        }
        $femaleID = $this->reqArray[$this->reqIndex];
        $feMale = $femaleArray[$femaleID];
        if ($feMale->BeRequest($this->id)) {
            $this->partnerid = $femaleID;
            return true;
        } else {
            $this->reqIndex = $this->reqIndex + 1;
            return false;
        }
    }
}

class FeMale extends People
{
    function __construct($myID)
    {
        parent::__construct($myID);
    }

    function BeRequest($maleID)
    {
        if ($this->isMarried()) {
            return false;
        }
        $this->partnerid = $maleID;
        return true;
    }
}

class Marry
{
    public $maleArr;
    public $femaleArr;

    function __construct($num)
    {
        $this->maleArr = array();
        $this->femaleArr = array();
        for ($i = 0; $i < $num; $i++) {
            $this->maleArr[$i] = new Male($i);
            $this->maleArr[$i]->initRequestList($num);
            $this->femaleArr[$i] = new FeMale($i);
            $this->femaleArr[$i]->initRequestList($num);
        }
    }

    function needMatch()
    {
        foreach ($this->maleArr as $key => $value) {
            if (!($value->isMarried())) {
                return true;
            }
        }
        return false;
    }

    function start()
    {
        while ($this->needMatch()) {
            foreach ($this->maleArr as $key => $value) {
                $value->request($this->femaleArr);
            }
        }
    }

    function getMaleSatisfaction()
    {
        $sa = 0;
        foreach ($this->maleArr as $key => $value) {
            $saItem = $value->getSatisfaction();
            //var_dump($saItem);
            $sa = $sa + $saItem;
        }
        $sa = $sa / count($this->maleArr);
        return $sa;
    }

    function getFemaleSatisfaction()
    {
        $sa = 0;
        foreach ($this->femaleArr as $key => $value) {
            $saItem = $value->getSatisfaction();
            $sa = $sa + $saItem;
        }
        $sa = $sa / count($this->maleArr);
        return $sa;
    }
}

$marry = new Marry(500);
$marry->start();
echo 'male satisfaction : ';
echo $marry->getMaleSatisfaction();
echo '<br />';
echo 'female satisfaction : ';
echo $marry->getFemaleSatisfaction();

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
php环境搭建发布时间:2022-07-10
下一篇:
使用 gpg 加密文件 - 通过 shell 或 php发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap