有很多天真的方法來解決這個問題,但我正在尋找一個好的解決方案。您有一個函數foo(int a,int b),如果'a'與'b'相鄰'則返回true,如果'a'是'false',則返回false不與'b'相鄰。你有這樣一個數組[1,4,5,9,3,2,6,15,89,11,24],但實際上有一個很長的長度,如120,並且會一遍又一遍地重複(其遺傳算法適應度函數),這就是爲什麼效率很重要。統計存儲在一個數組中的所有相鄰節點的列表
我想要一個函數,它返回數組中每個可能的'list'列表的長度,但不包括'lists',它只是一個較大列表的子集。例如,如果foo(1,4) - > true,foo(4,5) - > true,foo(5,9) - > false,foo(9,3)& foo(3,2) )& foo(2,6),foo(6,15) - > true,則有'lists'(1,4,5)和(9,3,2,6),所以長度爲3和4. I不想讓它返回(3,2,6),因爲這只是9,3,2,6的子集。
謝謝。
編輯
對不起,我才意識到我沒有解釋整個問題,剩下的部分是什麼,是如此困難。讓我們重新開始。忘記第一篇文章。這會讓我們感到困惑。假設有一個函數foo(int [] array),如果該數組是「好」數組,則返回true;如果該數組是「壞」數組,則返回false。什麼使它好或壞在這裏並不重要。
鑑於完整數組[1,6,8,9,5,11,45,16,9],可以說子數組[1,6,8]是一個「好」數組,[9,5 ,11,45]是一個「好」的陣列。此外[5,11,45,16,9]是一個「好」陣列,也是最長的「好」子陣列。注意雖然[9,5,11,45]是一個「好」數組,而[5,11,45,16,9]是一個「好」數組,[9,5,11,45,16,9] ]是一個「壞」數組。
我們想要所有「好」數組的長度計數,但不是「好」數組的子數組。此外,如上所述,一個「好」數組可能會在另一個「好」數組的中間開始,但這兩者的組合可能是「壞」數組。
定義'天真的做法'。你想要比'O(n^2)'更好的東西嗎? – IVlad 2010-04-01 13:13:18
如果你一遍又一遍地做它,速度比內存更重要,並且列表在運行之間變化(稍微改變),那麼可能值得存儲指向每個鏈的開始的指針。 通過這種方式,當列表發生變化時,您正限制您必須更新鏈接列表。 – 2010-04-01 13:36:10