【发布时间】:2017-02-09 11:41:36
【问题描述】:
我有一组想要生孩子的父母,还有一个空数组(我需要固定长度)等待填充。
我需要婴儿——孩子——根据他们父亲的英俊程度平均分配;但是,我需要每个人都得到一个克隆,以防他们的变异孩子更丑/更漂亮,然后还有另一个机会......(parents.length <= children.length)
父数组是按颜值排序的,所以parents[0] = me;。
到目前为止我所做的是:
for (var p = parents.legth; parent--;) {
var myself = parents[p],
aRandomDaddy = parents[~~(Math.random()*parents.length)]
iDeserveMoreThan1Child = parents.length-p;
// if this is 0 they're last in the array and just get their 1 clone. Should be different, right?
makeABabyWith(myself);
if (iDeserveMoreThan1Child) {
makeABabyWith(aRandomDaddy);
}
}
我现在想做的是找出一种算法来计算makeABabyWith(aRandomDaddy)、children.length - parents.length 次,并考虑到爸爸们有多帅。
我想过这样做:
for(var c = parents.length, totalHandsomeness = 0; c--;)
totalHandsomeness+= parents[c].handsomeness;
...
makeABabyWith(myself);
for (var handsomenessComparedToEveryoneElse
= ~~(myself.handsomeness * children.length / totalHandsomeness);
handsomenessComparedToEveryoneElse--;) {
makeABabyWith(aRandomDaddy);
}
...
现在,这给出了相对于父母的百分比的分布。 但是,当地板发生时,您有时会得到 0。 因此,如果 children 数组的长度为 20,则您的后代的范围可以非常广泛。
我想到的一种解决方法是迭代地运行这个前循环,如下所示:
...
var childrenToBeCreated = children.length - parents.length;
...
makeABabyWith(myself);
while (childrenToBeCreated) for (var handsomenessComparedToEveryoneElse
= ~~(myself.handsomeness * children.length / totalHandsomeness);
handsomenessComparedToEveryoneElse--;) {
if (childrenToBeCreated) {
makeABabyWith(aRandomDaddy);
childrenToBeCreated--;
} else break;
}
//EDIT: realised this would run to the end in the first loop and break, instead of run through all and check for left overs.
//EDIT OF THE EDIT: no it wouldn't...
//ED...: Yes it would, the while loops inside the for loop.
...
console.log("is","this"+"a good way to do it?? would this even work");
虽然这是用 JS 编写的,但在任何语言中都是完全相同的原理。
我在写这个问题时想到的方法是否足够,你会怎么做?
编辑:最后一个示例是使用childrenToBeCreated 的百分比而不是ptotal,我想我很困惑。
【问题讨论】:
-
How do you properly distribute children?这听起来更像是一个法律问题,而不是编程问题。听起来在道德上也有点可疑。 -
我不得不赞成这个问题,以及你的评论@SamAxe。前提是历史性的。大声笑
I need babies。 LOL 父数组是按颜值排序的,所以parents[0] = me -
这整个问题都是秘密的贩卖广告。
-
您意识到您的软件永远不会运行,对吗?所有的父母都是爸爸......虽然这在某些地方可能在社会上是可以接受的......无论您的位置,政治,道德等如何,这都是生殖上的不可能性。
-
makeABabyWith(aRandomDaddy)看看这就是当今社会的问题
标签: javascript arrays algorithm sorting genetic-algorithm