這是我需要做的典型示例$testArr = array(2.05080E6,29400,420);$stockArrays = array( array(2.05080E6,29400,0), array(2.05080E6,9800,420), array(1.715E6,24500,280), array(2.05080E6,29400,140), array(2.05080E6,4900,7));我需要確定差異最小的 stockArray。幾點說明保證每個位置數(shù)組元素的數(shù)值不重疊。(即 arr[0] 將始終具有最大值,arr 1將至少小 10 個數(shù)量級等)。在確定最小差異時,差異的絕對值不計算在內(nèi)。只是,不同數(shù)組索引的數(shù)量很重要。位置差異確實具有權(quán)重。因此,在我的示例中,stockArr 1也“更加不同” ——就像它的 stockArr[0] 和 stockArr[3] 對應物一樣——僅在一個索引位置上有所不同,因為該索引位置更大。stockArrays 元素的數(shù)量通常少于 10 個,但可能更多(盡管永遠不會變成 3 個數(shù)字)庫存數(shù)組將始終具有相同數(shù)量的元素。測試數(shù)組將具有相同或更少的元素。但是,當填充較少的 testArr 時,可能匹配的元素始終與 stockArray 位于同一位置。例如$testArray(29400,140)將被轉(zhuǎn)化為$testArray(0,29400,140);在進行差異測試之前。最后,平局是可能的。例如,我上面的匹配示例是 stockArrays[0] 和 stockArrays[3]。在我的例子中,結(jié)果是$result = array(0=>array(0,0,1),3=>array(0,0,1));表明差異最小的股票數(shù)組位于索引 0 和 3 處,差異位于位置 2。在 PHP 中,我會以array_diff作為起點來處理所有這些。對于 Node/JavaScript,我可能會傾向于php.js array_diff端口,盡管我傾向于探索一下,因為在最壞的轉(zhuǎn)換場景中它是一個 O(n2) 事件。我是 Golang 的新手,所以我不確定如何在那里實現(xiàn)這個問題。我注意到 Node 確實有一個 array_diff npm 模塊。我有一個不合時宜的想法是將數(shù)組轉(zhuǎn)換為填充字符串(較小的數(shù)組元素填充為 0)并有效地對每個字符的序數(shù)值執(zhí)行 XOR,但我認為這可能是一件相當瘋狂的事情。我關(guān)心速度,但不是不惜一切代價。在理想的世界中,每種目標語言都將使用相同的解決方案(算法),但實際上它們之間的差異可能意味著這是不可能的/不是一個好主意。也許這里的某個人可能會向我指出實現(xiàn)這一點的不那么簡單的方法 - 即不僅僅是 array_diff 端口。
- 1 回答
- 0 關(guān)注
- 167 瀏覽
添加回答
舉報
0/150
提交
取消