2012-10-18 26 views
3

電子表格非常漂亮!單元格可以相互連接,如果有任何公式/值/其中一個單元格中的任何更改都可以正確更新!電子表格如何正確更新單元格/知道要更新哪些內容?

有誰知道關於電子表格如何執行此操作的一般概念? 我在說什麼是如果A1 = 1,A2 = 2和A3 = A1 + A2。然後我改變A1或A2和A3知道更新並正確地執行。當然,在這個例子中,它不能更新它的錯誤,但是在更復雜的例子中,它必須先更新「低」單元格,然後再更新構建在其上的東西。

編程時我自己有這樣的麻煩,在底層數據更改後正確更新所有內容。有時不是所有的東西都要更新,所以我不想更新所有東西。這只是一團糟。

我希望我的標籤是正確的,這樣的討論是允許的。謝謝!

+0

每個單元格都有一個立即依賴它的單元格列表。無論何時手動更改單元格,該列表中的所有單元格都會更新,並且它們的*依賴單元格將被遞歸處理(就像每個單元格都被手動更改一樣)。 –

+0

不確定爲什麼「excel」標籤被刪除,但這與C++無關。 –

+0

是的,我只是讓它離開並刪除我的評論。雖然我同意C++部分。但感謝您的答案,這已經在幫助! – user1594138

回答

4

我不知道電子表格在實踐中如何實現這一點。但我的想法來自於圖表上的topological sorting。考慮公式A3 = A1+A2。單元格將成爲圖形的節點。公式將支配邊緣。邊表示依賴關係。例如A3取決於A1。因此,我們有兩條邊,從A3到A1和A3到A2。現在上圖的拓撲排序將給你確切的評估順序。即A1 A2和A3。

另請注意,如果使用此算法,此圖需要定向非循環圖(DAG)。即它不包含任何週期。據我所知,excel在它的公式中檢測循環依賴。

拓撲排序的基礎算法使用DFS(深度優先搜索),它也可以檢測週期。因此可以報告這樣的週期。

+0

可能是這樣。看看這個線程的答案:http://stackoverflow.com/questions/5731932/algorithm-for-finding-circular-references-in-a-spreadsheet - 感謝您的幫助! :) – user1594138