我需要按價格實現產品的分面搜索,即我想高效地生成帶有每個範圍內的產品數量。找到最小長度,使滑動窗口全長滑動包含給定集合的所有區間
由於各種原因,我可以建立作爲一個索引的最好的事情是一個表,每個產品可以使產品的最小和最大可能的價格,如:
idProduct | priceMin | priceMax 1 | 15 | 20 2 | 2 | 3 3 | 5 | 7 4 | 13 | 19
我們可以假設,所有的數字都自然整數。
要查詢效率,我想找到一個大小s
這樣可以保證每個產品,存在一個自然數k,如:
k * s <= priceMin && priceMax <= (k + 1) * s
換句話說,預 - 計算範圍列表,以便確定給定產品是否落入其中一個範圍內。
使用上面的數據,數字12是用於s
一個適當的值,這是因爲:
1 * 12 <= 15 && 20 <= 2 * 12
0 * 12 <= 2 && 3 <= 1 * 12
0 * 12 <= 5 && 7 <= 1 * 12
1 * 12 <= 13 && 19 <= 2 * 12
然而,數字6是不是s
一個合適的值,因爲它不用於產品#3工作作爲0 * 6 <= 5
但7 > 1 * 6
在現實世界中,價格表將有成千上萬的行,所以我正在尋找一種有效的算法,可以讓我找到s
的最小可能值。
如果這是一個古典問題,你知道它的名字,我可以從那裏谷歌,但到目前爲止,我無法找到任何相關的東西。
所以,你想要最密集的格子,沒有輸入間隔相交嗎?這應該是可行的。 –
@JanDvorak我對這些術語不是很熟悉,但可能是:) – djfm