[英]Taxicab algorithm using priority queue
出租車編號是可以表示為兩個立方體之和的數字,用兩種不同的方式表示,其中整數a, b, c, d
不相等。 以下代碼使用優先級隊列生成此類數字。
for i = 1..n
pq.insert( Vector(i^3+i^3,i,i) )
prev = Vector(0, 0, 0)
while not pq.empty()
curr = pq.deleteMin()
if prev[0] == curr[0]
print curr[0] is a Taxicab number that can be expressed as
prev[1]^3 + prev[2]^3 and curr[1]^3 + curr[2]^3
prev = curr
if curr[2] < N
j = curr[2] + 1
pq.insert( Vector(curr[1]^3+ j^3, curr[1], j) )
這樣的數字之一是: 1729 = 12^3 + 1^3 = 10^3 + 9^3
。 如果在while循環的每次迭代中,優先級隊列中唯一(最高即最小)的元素被刪除,並且prev = [1729, 12, 1]
和current = [1729, 10, 9]
prev = [1729, 12, 1]
,怎么可能? prev等於之前迭代的數字,因此對於此示例,該數字為[1512, 10, 8]
(因為while循環僅修改了第一個和第三個元素)。
答案是,當您將一個元素插入優先級隊列時,它自然會降至其第一個元素所指定的級別。 因此,您可以按照想到的順序插入元素,然后按總和將它們拉出。 只要您隨后插入的內容之和大於您拉出的內容,即使您沒有從其中開始的一切開始,也可以按正確的順序獲取所有內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.