美文网首页编什么程PHP开发
利用最优停止理论,寻找你的真爱

利用最优停止理论,寻找你的真爱

作者: 沙蒿同学 | 来源:发表于2019-01-06 16:51 被阅读59次

前言

某天我在西瓜视频看了李永乐老师的《如何才能找到真命天子?》,感触颇多,心想能不能用编程把这个数学公式给敲出来,好啦,说干就干。建议各位同学朋友有空多看看李永乐老师的教学视频,纯干货,老师讲得好还很有趣。

开始

故事要从苏格拉底他老人家开始说起:
一天,苏格拉底带领几个弟子来到一块长满麦穗的田地边,对弟子们说:“你们去麦地里摘一个最大的麦穗,只许进,不许退。”
第一个弟子走几步看见一支又大又漂亮的麦穗,高兴地摘下了。但是他继续前进时,发现前面有许多比他摘的那支大,只得遗憾地走完了全程。第二个弟子吸取了教训.每当他要摘时,总是提醒自己,后面还有更好的。当他快到终点时才发现,机会全错过了。第三个弟子吸取了前两位教训.当他走到三分之一时,即分出大、中、小三类,再走三分之一时验证是否正确,等到最后三分之一时,他选择了属于大类中的一支美丽的麦穗。虽说,这不一定是最大最美的那一支,但他满意地走完了全程。"
苏格拉底观点:“麦地里肯定有最大的麦穗,但你未必能碰到它。即使碰到了,也未必能作出准确的判断。只有你在经历过一半以后选择你认为最好的,以后也许会遇到比你选择的更好的,但你会一生无悔”

我的看法

是啊,类似捡麦穗,人的一生都希望可以寻找到一个真正爱你的人,尽管你知道他不会是完美的,但你一定希望他在你心里就是完美的那一个。也许,你的一生会遇到很多爱你的人,但最终你们别没有走到一起;也许你的一生一心一意只爱一个人,而那个人却一直没出现;有句话说得好,人的一生会遇到三种女人,第一种是你爱的人却不爱你的人,第二种是爱你的人你却不爱的人,第三种是你不爱她不爱却可以相伴一生的人,那么问题来了,你现在喜欢的是那种人呢?为什么前任要跟我分手呢?什么时候才是我选择真爱的时候呢?别急,看下面哈。

代码实现

<?php
/**
* Created by PhpStorm.
* User: benny
* Date: 18-12-7
* Time: 下午2:58
*/
$first_time = microtime(true);
//var_dump(find_love(8,1))."<br/>";

$result = [];
for ($i=1;$i <= 8;$i++){
  $percent = array();
  //生成排列组合可能性数组
  //例如:恋爱3次,有6种可能, "[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]"
  $all_array = arrangement(range(1,$i),$i);
 // var_dump(json_encode($all_array));
  echo "<br/>";
  for ($j=0;$j<$i;$j++){
      $percent[] = find_love($i,$j,$all_array);
  }
  $smaple = array_search(max($percent),$percent);
  echo '当你恋爱次数为:'.$i.' 时,你应该选择的样本数为:'.$smaple.' , 你得到真爱的概率是:'.max($percent)."<br/>";

  switch ($i) {
      case 1:
          echo "当你选择一生只挚爱一个人的时候,那毋容置疑你选择的她,那是你一生中最‘完美的人’,可能在他人眼里他有很多的瑕疵,但在你心里永远的值得依靠的另一半。<br/>";
          break;
      case 2:
          echo "你的一生会被两个人所疼爱,不管你选择的前者还后者,你得到真爱的概率只有50%,就如鱼和熊掌不可兼得,得与失之间选择,选择前者你可能会对未知的那个他报有期望,选择后者的你可能会念念不忘与前任的朝朝夕夕。<br/>";
          break;
      case 3:
          echo "如果你选择相爱3次,你应该把第一个遇到的那个人当做样本,不管他好不好,你最后都不要跟他在一起,这可能就是为什么我有些人会失恋的原因吧,因为你落入到他人的样本区间啦。<br/>";
          break;
      case 4:
          echo "人的一生是短暂的,你能相爱四次,证明你也是有一定魅力的,也相当自信,选择相爱四次的你是最机智的,总和考虑,这个选择可以让你最大概率的得到真爱,选择第一个作为自己的样本得到真爱的概率是46%。<br/>";
          break;    
      default:
         echo "不解释,你都是老司机啦,希望你找到真爱。<br/>";
          break;
  }
  // $result[]= $item =[
  //     'love_nums' =>  $i,
  //     'sample_nums' => $smaple,
  //     'percent'   =>  max($percent),
  // ];

}
//var_dump(json_encode($result));
$last_time = microtime(true);

echo '运行时间:'.round($last_time-$first_time,8).'秒';

/*
  $love_nums 恋爱次数
  $sample_nums 样本个数
  $all_array 所有恋爱可能性排列情况
*/
function find_love($love_nums = 0,$sample_nums = 0,$all_array = array()){
  $sum = count($all_array);
  
  $count = 0;
  
  foreach ($all_array as $item){

      if ($sample_nums == 0 && $item[0] == $love_nums) {
         $count++;
      }
      else{
          $sample_array = array_slice($item,0,$sample_nums);
          $love_array = array_slice($item,$sample_nums);
          foreach ($love_array as $key => $value) {
              if ($value > max($sample_array) && $value == $love_nums) {
                  $count++;
                  break;
              }elseif($value > max($sample_array) && $value != $love_nums){
                  break;
              }
          }
         
      }
      
      

  }
  return sprintf('%.2f',$count/$sum);
}

// 阶乘
function factorial($n) {
  return array_product(range(1, $n));
}

// 排列数,公式=n!/(n-m)!
function arrange_num($n, $m) {
  return factorial($n)/factorial($n-$m);
}

// 组合数,公式=(n!/(n-m)!)/m!
function combination_num($n, $m) {
  return arrange($n, $m)/factorial($m);
}
// 排列
function arrangement($st_array, $m) {
  $re_array = array();

  $n = count($st_array);
  if ($m <= 0 || $m > $n) {
      return $re_array;
  }

  for ($i=0; $i<$n; $i++) {
      $item_array = $st_array;
      $t = array_splice($item_array, $i, 1);
      if ($m == 1) {
          $re_array[] = $t;
      } else {
          $c = arrangement($item_array, $m-1);
          foreach ($c as $v) {
              $re_array[] = array_merge($t, $v);
          }
      }
  }

  return $re_array;
}

// 组合
function combination($st_array, $m) {
  $re_array = array();

  $n = count($st_array);
  if ($m <= 0 || $m > $n) {
      return $re_array;
  }

  for ($i=0; $i<$n; $i++) {
      $t = array($st_array[$i]);
      if ($m == 1) {
          $re_array[] = $t;
      } else {
          $item_array = array_slice($st_array, $i+1);
          $c = combination($item_array, $m-1);
          foreach ($c as $v) {
              $re_array[] = array_merge($t, $v);
          }
      }
  }

  return $re_array;
}

效果图

image.png

总结

  • 当你选择一生只挚爱一个人的时候,那毋容置疑你选择的她,那是你一生中最‘完美的人’,可能在他人眼里他有很多的瑕疵,但在你心里永远的值得依靠的另一半。

  • 你的一生会被两个人所疼爱,不管你选择的前者还后者,你得到真爱的概率只有50%,就如鱼和熊掌不可兼得,得与失之间选择,选择前者你可能会对未知的那个他报有期望,选择后者的你可能会念念不忘与前任的朝朝夕夕。

  • 如果你选择相爱3次,你应该把第一个遇到的那个人当做样本,不管他好不好,你最后都不要跟他在一起,这可能就是为什么我有些人会失恋的原因吧,因为你落入到他人的样本区间啦。

  • 人的一生是短暂的,你能相爱四次,证明你也是有一定魅力的,也相当自信,选择相爱四次的你是最机智的,总和考虑,这个选择可以让你最大概率的得到真爱,选择第一个作为自己的样本得到真爱的概率是46%。

  • 这里主要用到的数学知识是排列组合,以上是封装好的排列组合函数外加根据业务需求写出的"寻找爱情"的业务逻辑,主要代码都已加上注释,阅读代码即可读懂,

话题

看完故事、代码和结论,你应该知道下一个她是不是你的真爱了吧?可下方留言哦。

原文作者:------ 沙蒿 ------
关注我吧《程序员的碎碎念》作者,不会ui的前端不是好后端
不忘初心,牢记使命,对于文章内容有疑问的或者想深入交流学习的朋友可以加我QQ:2283743369

相关文章

  • 利用最优停止理论,寻找你的真爱

    前言 某天我在西瓜视频看了李永乐老师的《如何才能找到真命天子?》,感触颇多,心想能不能用编程把这个数学公式给敲出来...

  • 最优停止理论

    我们在做决定的时候应该如何去思考?如何找打这个平衡点,能让我们的决定更加明智? 找对象的案例: 比如一个女青年从1...

  • 最优停止理论

    “最优停止理论(optimal stopping theory)”。简单理解,就是在一共有n个人的情况下,先观察前...

  • 恋爱

    一、数学家的理论~最优停止理论 数学家计算出了一个最优停止理论,假设你从15岁开始恋爱,35岁结婚。这个理论认为,...

  • 最优停止理论和味觉

    人与人之间,最有趣的是距离; 太近——压迫; 太远——疏离。 时不时会听到身边一些单身女性抱怨:“你说,找个对象怎...

  • 120天18本书之《算法之美》

    1. 最优停止理论--如何选择停止观望的时机 37%法则--摸清情况再行动法则 假如你在面试一批求职者(人数越多这...

  • 最优停止理论:你会及时收手,还是继续行动?

    这是我的第 201 天分享 全文共约 2400 字,阅读完共需约 7 分钟 昨天,我们了解了什么是“最优停止理论”...

  • 专题《算法》3: 一个关于时间管理的数学解决方案

    专题目录 算法的世界最优停止理论,什么时候停止观望一个关于时间管理的数学解决方案想得太多?你可能过度拟合了博弈论,...

  • 专题《算法》4:想得太多?你可能过度拟合了

    专题目录 算法的世界最优停止理论,什么时候停止观望一个关于时间管理的数学解决方案想得太多?你可能过度拟合了博弈论,...

  • 随笔

    1、简历写法 关键词、数字。如策略类的,数学建模、调研,覆盖多少用户,发过多少版本 2、最优停止理论 37%法则 ...

网友评论

    本文标题:利用最优停止理论,寻找你的真爱

    本文链接:https://www.haomeiwen.com/subject/znpsrqtx.html