Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择博弈结果最佳机会的算法_C#_Math - Fatal编程技术网

C# 选择博弈结果最佳机会的算法

C# 选择博弈结果最佳机会的算法,c#,math,C#,Math,假设我们有多个值和一个剩余时间,以下面的列表为例: 220 - 1 minute left 150 - 2 minutes left 600 - 13 minutes left 180 - 2 hours left 540 - 1 hour left 400 - 1.5 hours left 剩下的时间很少超过两小时,但理论上可以是任何时间。所以我们假设当时还不知道剩下的最长时间。这些值随着时间的推移或多或少地增加。目标是根据时间的最低值对列表进行排序。在示例列表中,我希望结果接近: 150

假设我们有多个值和一个剩余时间,以下面的列表为例:

220 - 1 minute left
150 - 2 minutes left
600 - 13 minutes left
180 - 2 hours left
540 - 1 hour left
400 - 1.5 hours left
剩下的时间很少超过两小时,但理论上可以是任何时间。所以我们假设当时还不知道剩下的最长时间。这些值随着时间的推移或多或少地增加。目标是根据时间的最低值对列表进行排序。在示例列表中,我希望结果接近:

150 - 2 minutes left
220 - 1 minute left
180 - 2 hours left
400 - 1.5 hours left
540 - 1 hour left
600 - 13 minutes left
我不擅长数学,我也不完全确定什么是最好的分类方法。基本上,应该在一定程度上考虑时间,以确定最佳顺序


我将详细阐述一下这个问题,因为问题似乎不清楚。这些值表示某个项目(食品、木材等)的多个投标。我想显示一个排序的基础上,一个用户在进入的机会。例如,有些物品不常被出价,由于这些物品是免费赠送的,他们仍然有机会赢得一些东西。

我的建议是:

  • 使用
    Regex
    获取时间

  • 将时间转换为分钟(或秒,无论是什么)

  • 按转换时间排序


  • 将值放入
    列表
    ,其中
    T
    ,具有
    int Score
    属性和
    TimeSpan TimeLeft
    属性

    然后您可以执行以下操作:

    var sortedList = originalList.OrderBy(x => x.Score + x.TimeLeft.TotalMinutes).ToList();
    
    根据您的示例(括号中的订单值):


    你的问题毫无意义。你能详细说明为什么订单是这样吗?是的,你是对的,我已经添加了一个描述来详细说明。你知道你甚至不知道你想要什么吗?我知道我想要什么,你还有什么不清楚的吗?那不正确,参见示例。更新了一个更好的算法-将TimeLeft转换为分钟并添加到排序的分数。谢谢,这是最接近我现在得到的答案。我不太清楚为什么我一开始就这么问。这很简单,因为我也有每分钟出价的信息,所以我可以把它和剩余时间相乘。我已经把时间作为DateTime对象了。按转换时间排序无法解决此问题。
    150 - 2 minutes left (152)
    220 - 1 minute left (221)
    180 - 2 hours left (300)
    400 - 1.5 hours left (490)
    540 - 1 hour left (600)
    600 - 13 minutes left (613)