我的数学很糟糕,真的很糟糕。这么糟糕,我甚至都在努力甚至说出这个问题。
情况是火车旅行,你有四个阵列可供使用。
Leaving_Stations Arriving_Stations
Leaving_Dates Returning_Dates
所以,假设你只对单向路线感兴趣,你需要弄清楚有多少路线组合。那就是(我认为)
possible_routes = (leaving_stations x arriving_stations) x leaving_dates
但是,如果我想要回程,我该如何计算出有多少种组合?
UPDATE ::
或者这会起作用吗?
possible_routes =((leaving_stations x arrival_stations)x leaving_dates)x(leaving_dates x returning_dates)
答案 0 :(得分:1)
嗯,答案是你的阵列名称并不完全清楚。
假设我们有4个数组:
然后我们可以在这里做一些解释。我们使用符号| x |表示数组[x]的基数(元素数),以便| Leaving Dates |是您可以留下的日期总数。
然后|离开日期| * |离开车站| * |到达站|将转换为,选择一个日期离开,然后选择一个站离开,然后选择一个站到达,并以所有可能的方式做到这一点。所以这似乎是你要求的单程旅行。
现在,实际上,我将假设这是一个现实世界的问题,所以我们假设我们选择在6月20日离开南安普敦前往约克郡,在回程中我们可以在这一点上选择应该是返回日期(意思是我假设你想回家)。
因此,我们可以计划往返的总方式是首先计划如上所述的单程旅行,然后选择返回日期,这将是| Leaving Dates | * |离开车站| * |到达站| * |退货日期|。前3个学期选择上述单程旅行,最后一个学期从所有可能的日期中选择返回日期。当然,如果我们可以选择返回我们离开的那个站以外的另一个站,那么等式将是(|离开日期| * |离开站| * |到达站|)*(|返回日期| * |离开车站|),或者如果我们甚至可以从不同的到达站离开,而不是我们最初到达的那个到达(|离开日期| * |离开车站| * |到达车站|)*(|返回日期| * |到达车站| * |离开车站|)。
答案 1 :(得分:0)
我不确定我是否理解正确,但这似乎是一个典型的graph-routing理论问题。您可以查看Minimum Path或A*算法。
答案 2 :(得分:0)
首先,A-A路线是错误的,所以:
possible_routes =
(
leaving_stations x arriving_stations -
(leaving_stations [intersection] arrivig_stations)
) x leaving_dates
交叉操作是属于两个数组的元素
第二,当你想要双向路线时,组合是:
possible_2way_routes =
(
leaving_stations x arriving_stations -
(leaving_stations [intersection] arrivig_stations)
) x
leaving_dates x
(return_dates that later than leaving dates+route time)
'leaving_dates x(return_dates晚于离开日期+路线时间)'是奇怪的事情,因此可能更容易计算高估计数 - 在任何情况下都不低于possible_2way_routes。所有的return_dates都晚于leaving_dates,所以:
possible_2way_routes <=
(
leaving_stations x arriving_stations -
(leaving_stations [intersection] arrivig_stations)
) x leaving_dates x return_dates
哦,我记得如何计算'return_dates晚于离开日期+路线时间'。它是:
for each element of leaving_dates {
sum=sum+return_dates that later than ith leaving date+route time}
虽然......仍然存在'路线时间'的问题。