code

2017年7月28日 星期五

Scala Parallel Programming筆記 5 - Associativity

associative operation

定義

所以樹狀結構的資料,如果f可以放在node的位置,如果operands順序一樣,不論樹狀結構如何,evaluate (e.g. reduce)出來的結果都一樣。

Floating point operation not associative

在某些極端的float值,使用associative operators可能會造成非預期結果,例如以下:

這根data size有關,可能在運算過程中會產生overflow,相當於沒有associativity。


Association on tuples

如果定義f為以下:


且f1 f2 為associative operation,則f也為associative operation。

舉例來說,以下times是associative function,因為*是associative:



再舉一個average的例子,假設要算某個collection的average,我們可以用兩個reduce function做到:

如果要改寫成一個reduce呢? 這就要用到tuples:

(等式右邊有typo)

這個f定義符合上面的associative operation定義,所以f也是一個associative operation,可以用來做parallel computation。

average =




沒有留言:

張貼留言