這裏是我的目標:我有ñ名單(假設N = 3)大小不同,每一個包含不同類型的項目和我需要生成一個包含所有他們的一個列表,最小化相同類型的相鄰商品的數量。如何確定性地交織N個不同長度的異構列表?
我個人使用Python,但任何僞代碼解決方案將被接受。
實施例:
A = [a1, a2, a3]
B = [b1, b2]
C = [c1, c2, c3, c4]
OUT = f(A, B, C)
> [a1, b1, c1, a2, b2, c2, a3, c3, c4]
在上面的例子我在同一時間被簡單地重複所述3所列出並從挑選每一個項目,直到每一個項目被取。這非常簡單,快速和確定性。 (注:鄰近的類似項目的數量不是最佳最小化,但讓我們說這是可容忍的多數用例)
但
我寧願避免A,B,C, a,b,c,...模式,並使其看起來更「自然」,但仍然確定性(閱讀:相同的輸入,相同的輸出)。
實施例:
OUT = [a1, b1, c1, b2, a2, c2, a3, c3, c4]
任何建議?
P.s.對於一個真實世界的例子,讓我們對這3個列表進行映像,其中包含3種不同類型的文章(新聞,教程和評論),我們正在爲我們的博客生成建議/推薦文章列表。
你可以選擇下一個元素使用僞隨機a附加到結果列表中總是使用相同種子的算法。 – 2015-02-12 00:27:43
您被迫擁有同一類別的相鄰元素的唯一方法是,如果該類別至少有2個元素比所有其他元素放在一起。因此,通過組合從最小到最大的列表,可以很容易地將鄰接關係歸納爲最小值。但是,我懷疑你有其他標準,你沒有說明。 – 2015-02-12 14:35:25