2014-03-27 69 views
1

我是新算法設計。我有一個約8128整數的列表。我需要創建一個算法,創建128個不同的唯一數字組合。新手算法設計

第一個數字1未被任何組合使用。前6個數字序列開始如下:

  1. 2,4,7,11,16,22
  2. 3,6,10,15,21
  3. 5,9,14,20
  4. 8,13,19
  5. 12,18

我注意到,由1中的每個序列之間的數字之間的間隔增加。我也看到它似乎選擇了第一個唯一的(未使用的)整數來開始一個序列。我堅持試圖在Python中實現這一點。

我想解決設施位置問題。我有8128個距離值存儲在一個數組中。下面的代碼片段獲得前兩個相對距離陣列正確的,但第三重申,之前已經

distances = [[0 for col in range(2)] for row in range(128)] #this array contains line numbers that contain distances 

#1st iteration works 
startpoint = 0 
count = 1 
diff = 2 

while startpoint < 8127: 
    print distance[startpoint+diff] 
    startpoint = startpoint+count 
    count += 1 
    diff += 2 

#2nd iteration works 
startpoint = 1 
count = 2 
diff = 3 

while startpoint < 8127: 
    print distance[startpoint+diff] 
    startpoint = startpoint+count 
    count += 1 
    diff += 2 

#3rd iteration repeats a value 
startpoint = 2 
count = 3 
diff = 4 

while startpoint < 8127: 
    print distance[startpoint+diff] 
    startpoint = startpoint+count 
    count += 1 
    diff += 2 

有一個例子或該算法在那裏的實現使用的值?

+3

嗨和歡迎!看起來好像你已經收到了一份學校作業,要求我們爲你解決整個問題,或者找一個圖書館。雖然我們喜歡一個很好的挑戰,並嘗試儘可能以最好的方式提供幫助。有些問題需要你先努力解決這個問題。如果您可以發佈一段代碼或研究證明,以瞭解您已嘗試過哪些解決方案以及哪些解決方案已工作/無法工作,併發布堆棧跟蹤,輸出或只是描述錯誤是什麼有時候夠了。 – Torxed

+0

這裏有點不清楚,你已經有一個算法,不明白它的內部運作,或者你正在尋找一種算法來解決一個固定的問題? – Codor

+0

@Codor:我正在尋找算法來解決設施位置問題 – user1801060

回答

2

的距離也許更好表示爲函數不是作爲一個陣列:

D(I, J) = I + J 

其中IJ是(未Pythonesuqe)爲基礎的一個索引。 (你是否意識到在你的代碼中,距離都是零?)

另外,你應該考慮行數(128)而不是總數值(8128)。你們三次迭代的目的對我而言並不明確。你不應該在行和列上循環嗎?

總之:

N = 128 
n = 2 

for i in range(N): 
    m = n 
    s = [] 
    for j in range(N - i): 
     s.append(m) 
     m += (j + 1) + (i + 1) 

    print i + 1, s   
    n += i + 1 

您可以注意到,每個數字只能出現一次,併爲圖案以另一種方式解決這個問題:

2 4 7 11 
    ///
///
///
3 6 10 
    //
//
//
5 9 
    /
/
/
8 

然後你就可以在前面創建的所有列表和打印他們在第二個循環:

n = 2 
L = [] 

for i in range(N): 
    L.append([]) 

    for LL in reversed(L): 
     LL.append(n) 
     n += 1 

for i, LL in enumerate(L): 
    print i + 1, LL 
+0

你是什麼意思由'D(I,J)= I + J'?很明顯,第1行和第2列的值不等於'1 + 2'。我認爲它應該是D [r,c] = 2 +(r + c)*(r + c + 1)/ 2 + c',其中'r'和'c'分別是行索引和列索引(從0開始)。 – justhalf

+0

'D'是OP所稱的距離。 'a [i] [j]'和'a [i] [j + 1]'之間的區別是'i + j + 2'。這不是數值4,而是4和下一個數值7的差值。 –

+0

啊,我明白了。那麼我誤解了符號。 – justhalf