如何动态地根据项目重要性分配权重?

时间:2014-09-27 13:39:31

标签: php sorting weighted

我试图找出一种方法,我可以用它来构建一个系统,该系统可以为表中的独立对象分配权重,用于随机加权排序 - 基于该项的重要性。例如,如果比例为0-9。如果您分配了四个项目3,5,9,1,那么系统将能够对这些数字进行排序,并构建列表,以便每个权重在四个对象之间总计最多1个。你会如何分拣这些物品?

目前,这就是我对SQL的看法:

CREATE TABLE IF NOT EXISTS `block_types` (
    `ID` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `BlockTypeUID` varchar(35),
    `Name` varchar(20),
    `Weight` float,
    `Turns` int(11),
    `Score` int(11),
    `Hitpoints` int(20),
    `Rarity` int(11),
    `Multiplier` int(1),
    `Effect` int(11),
    `Area` int(11),
    PRIMARY KEY (`ID`)
) DEFAULT COLLATE=utf8_general_ci;

权重是从0.0001到1的浮点数,此时我基本上通过简单的输入形式手动分配它。这个想法是Rarity将处理存储0-9,并用于根据所有其他条目自动计算新权重 - 以便表的总和等于1.

1 个答案:

答案 0 :(得分:0)

编辑:我阅读了问题的底部部分。

这个稍微混乱的查询使得表格中的所有权重字段根据稀有度按比例加起来为1。 (它可能更像是.9999999998)

UPDATE block_types SET Weight=Rarity/(SELECT SUM(Rarity) AS r FROM (SELECT Rarity FROM block_types) AS bt);

例如,如果有两行,一个稀有度为40而另一个稀有度为80,那么你的最终体重为.3333和.6666(40为120总量的1/3,80为2) / 3)。

希望有所帮助。