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

前言

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

开始

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

我的看法

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

代码实现

<?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%。

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

话题

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容