首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蛋糕比较算法

蛋糕比较算法
EN

Stack Overflow用户
提问于 2009-08-01 06:09:23
回答 5查看 690关注 0票数 4

这从字面上讲就是比较蛋糕。我的朋友正在举办一个纸杯蛋糕聚会,目的是确定曼哈顿最好的纸杯蛋糕店。实际上,它远比这更有野心。继续往下读。

有27家面包店,19个人参加(可能有一两个人没有出席)。每家面包店将有4个纸杯蛋糕,如果可能的话,包括主食-香草,巧克力和红色天鹅绒-并以通配符的味道四舍五入。有4个属性来评价纸杯蛋糕:味道,湿度,外观(漂亮)和一般的好坏。人们将为他们品尝的每个纸杯蛋糕的每个属性提供5分制的评分。最后,每个纸杯蛋糕可以切成4或5块。

问题是:为每个属性和每种口味的面包店提供统计上有意义的排名的过程是什么(将“通配符”视为一种口味)?具体地说,我们想要对面包店进行8次排名:对于每种口味,我们想要根据好的程度对面包店进行排名(好是其中一个属性),对于每个属性,我们想要对所有口味的面包店进行排名(即,独立于口味,即,聚合所有口味)。大奖将授予最好的面包店。

当然,这是推广这一点的加分。

这将在大约12个小时后发生,所以如果在此期间没有人回答,我将发布我们最终要做的事情。

PS:这是派对后的博客文章:http://gracenotesnyc.com/2009/08/05/gracenotes-nycs-cupcake-cagematch-the-sweetest-battle-ever/

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-08-03 04:25:43

这就是我们最终要做的。我制作了一个很大的表格来收集每个人在http://etherpad.com/sugarorgy上的评分(版本25,以防我在上面添加了这个公共链接,以防它被破坏),然后使用下面的Perl脚本将数据解析成CSV文件:

代码语言:javascript
复制
#!/usr/bin/env perl
# Grabs the cupcake data from etherpad and parses it into a CSV file.

use LWP::Simple qw(get);

$content = get("http://etherpad.com/ep/pad/export/sugarorgy/latest?format=txt");
$content =~ s/^.*BEGIN_MAGIC\s*//s;
$content =~ s/END_MAGIC.*$//s;
$bakery = "none";
for $line (split('\n', $content)) {
  next if $line =~ /sar kri and deb/;
  if ($line =~ s/bakery\s+(\w+)//) { $bakery = $1; }
  $line =~ s/\([^\)]*\)//g; # strip out stuff in parens.
  $line =~ s/^\s+(\w)(\w)/$1 $2/;
  $line =~ s/\-/\-1/g;
  $line =~ s/^\s+//;
  $line =~ s/\s+$//;
  $line =~ s/\s+/\,/g;
  print "$bakery,$line\n"; 
}

然后我在Mathematica中做了平均值和诸如此类的东西:

代码语言:javascript
复制
data = Import["!~/svn/sugar.pl", "CSV"];

(* return a bakery's list of ratings for the given type of cupcake *)
tratings[bak_, t_] := Select[Drop[First@Select[data, 
                        #[[1]]==bak && #[[2]]==t && #[[3]]=="g" &], 3], #!=-1&]

(* return a bakery's list of ratings for the given cupcake attribute *)
aratings[bak_, a_] := Select[Flatten[Drop[#,3]& /@ 
                        Select[data, #[[1]]==bak && #[[3]]==a&]], #!=-1&]

(* overall rating for a bakery *)
oratings[bak_] := Join @@ (tratings[bak, #] & /@ {"V", "C", "R", "W"})

bakeries = Union@data[[All, 1]]

SortBy[{#, oratings@#, Round[Mean@oratings[#], .01]}& /@ bakeries, -#[[3]]&]

结果显示在http://etherpad.com/sugarorgy的底部。

票数 3
EN

Stack Overflow用户

发布于 2009-08-01 07:56:07

也许阅读有关voting systems的文章会有所帮助。附言:不要把维基百科上写的东西当做“好鱼”。我在那里发现了高级主题中的事实错误。

票数 2
EN

Stack Overflow用户

发布于 2009-08-01 07:26:39

将问题分解为子问题。

纸杯蛋糕的价值是多少?一种基本的方法是“分数的平均值”。一种稍微健壮的方法可能是“分数的加权平均”。但可能会有更复杂的情况...一个三好三味的纸杯蛋糕可能比一个五味一好的蛋糕“更好”,即使口味和好的重量相等(IOW,低分可能会产生不成比例的效果)。

制作一些纸杯蛋糕得分示例(详细说明!涵盖正常的场景和一些奇怪的场景),并估计如果你有一个理想的算法,你认为合理的“总体”分数会是多少。然后,使用这些数据对算法进行反向工程。

例如,一个好感度为4,风味为3,外观为1,湿度为4的纸杯蛋糕可能总体得分为4,而好感度为4,风味为2,外观为5,湿度为4的蛋糕可能只有3分。

接下来,对面包店执行相同的操作。给出一组分数范围不同的纸杯蛋糕,合适的评分是多少?然后,找出将为您提供该数据的函数。

“好”的排名似乎有点奇怪,因为它似乎是一个一般的评分,所以有它已经是总分,那么为什么要计算总分呢?

如果您有时间处理这个问题,我总是建议捕获原始数据,并将其作为更详细分析的基础,但我认为这在这里并不是真正相关的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1215949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档