我嘗試縮短我的問題,但這是我能做的最好的。因爲我想這是相當困難的理解我需要什麼,我會提供了一個例子:根據元素的第一個和最後一個值檢測和刪除數組中的元素的最有效方法
說我有以下數組:
$var = array(
array(1, 2, 3),
array(1, 3),
array(1, 2, 4, 3),
array(1, 3, 4)
);
我想是從$var
刪除所有陣列具有的第一個和最後一個元素與$var
中的另一個數組相同,但元素數量多於後者。
因此,下面陣列應被刪除:(1, 2, 3)
和(1, 2, 4, 3)
,因爲它們都開始1
並用3
結束,並具有比(1, 3)
,這也開始並以1
和3
結束多個元件。 (1, 3, 4)
應該保留,因爲沒有其他數組以1
開頭並且以4
結束並且具有比它少的元素。
我正在尋找最有效的方法來做到這一點,無論是在內存和時間。 $var
最多可以有100個陣列,每個陣列最多可以有10個元素。我想過在所有兩個元素之間使用某種比較(for(i=0;...) for(j=i+1;...) complexCompareFunction();
),但我認爲這不是非常有效。
你有你想要做什麼用例?可能有更好的方法來實現它... – Josh 2012-02-21 20:23:32
我正在生成鏈接兩個用戶選擇的位置的公共交通線路的所有組合。從生成的行組合(本例中爲'$ var')的數組中,我想刪除那些使用額外行的行。所以,如果可以用'(1,3)'行到達第二個點,爲什麼還要顯示'(1,2,3)'?在這裏,'2'行是額外的,沒有它可以到達目的地。 – linkyndy 2012-02-21 20:27:52
可能旅行1,2,3將花費更少的時間(因爲你坐火車)比1,3(因爲你只能乘坐巴士直接)。我們可以重建問題:以站點作爲節點和連接作爲邊的圖。對於每兩個節點n,m,您現在搜索以n開頭並以m結尾的最短路徑。在這個主題上有大量的參考文獻。 – Basti 2012-02-21 20:41:43