【发布时间】:2019-04-17 01:51:13
【问题描述】:
考虑到一系列酒店房间和可用期(1 月 1 日至 1 月 6 日):
[
{
roomId: 101,
availability: [
{ roomId: 101, date: '2018-01-01' },
{ roomId: 101, date: '2018-01-02' },
{ roomId: 101, date: '2018-01-03' },
{ roomId: 101, date: '2018-01-05' },
{ roomId: 101, date: '2018-01-06' }
]
},
{
roomId: 102,
availability: [
{ roomId: 102, date: '2018-01-01' },
{ roomId: 102, date: '2018-01-03' },
{ roomId: 102, date: '2018-01-04' },
{ roomId: 102, date: '2018-01-05' }
]
},
{
roomId: 103,
availability: [
{ roomId: 103, date: '2018-01-02' },
{ roomId: 103, date: '2018-01-03' },
{ roomId: 103, date: '2018-01-06' }
]
},
{
roomId: 104,
availability: [
{ roomId: 104, date: '2018-01-04' },
{ roomId: 104, date: '2018-01-05' },
{ roomId: 104, date: '2018-01-06' }
]
},
{
roomId: 105,
availability: [
{ roomId: 105, date: '2018-01-01' },
{ roomId: 105, date: '2018-01-02' },
{ roomId: 105, date: '2018-01-04' },
{ roomId: 105, date: '2018-01-06' }
]
}
]
上述可用性的表格说明:
| | 1 Jan | 2 Jan | 3 Jan | 4 Jan | 5 Jan | 6 Jan |
| 101 | O | O | O | | O | O |
| 102 | O | | O | O | O | |
| 103 | | O | O | | | O |
| 104 | | | | O | O | O |
| 105 | O | O | | O | | O |
基于上述输入的预期结果是具有分组可用性的最终房间:
{
roomId: 101, // determined by the first object in the array
availability: [
{ roomId: 101, date: '2018-01-01' },
{ roomId: 101, date: '2018-01-02' },
{ roomId: 101, date: '2018-01-03' },
{ roomId: 104, date: '2018-01-04' },
{ roomId: 104, date: '2018-01-05' },
{ roomId: 104, date: '2018-01-06' }
]
}
最终分组选择为:101 & 104
| | 1 Jan | 2 Jan | 3 Jan | 4 Jan | 5 Jan | 6 Jan |
| 101 | ✔️ | ✔️ | ✔️ | | O | O |
| 102 | O | | O | O | O | |
| 103 | | O | O | | | O |
| 104 | | | | ✔️ | ✔️ | ✔️ |
| 105 | O | O | | O | | O |
因此,最终选择是如何确定的,是基于整个入住期间最少移动的房间。
在javascript 中执行此操作的最有效的搜索算法(就性能而言)是什么? (需要高效以保持快速处理,即使有很长的可用性请求或更多房间分组)
我会将我的算法放在答案部分,但我认为不是 最有效的方法。如果有更好的方法,请提出建议!
【问题讨论】:
-
您的问题/问题听起来很有趣,可能最好在此处发布codereview.stackexchange.com,因为您的问题非常先进。 :)
-
我不是数学家,也不知道更好的算法,但我认为您缺少另一个约束。如果您有多种选择可供选择,您应该选择周围空洞最少的那个。否则,您将开始将所有房间的所有预订碎片化,从而无法选择一个房间进行较长时间的预订,导致大量短期预订占用所有房间。
-
@Oliver 我已经考虑过这一点并测试过,选择最少的空洞并不能真正获得最少的房间数量。很明显,如果我们在测试用例中加入更多的可用性。 ://
标签: javascript javascript algorithm search grouping