SICP 2 2 3 對一種資料處理過程的抽象

2021-07-26 02:48:06 字數 1644 閱讀 4884

有乙個很簡單的問題:對0到n的整數中的偶數的斐波那契數求和。

不對它進行高階抽象的話,問題應該是這樣解決的:

scheme**:

(define

(even_fib n)

(define

(even_fib_it m re)

(if (=

m n)

(+ re (fib m))

(even_fib

(+ m1)

(+ re (fib m)))))

(even_fib_it

00))

在sicp中研究的是對過程抽象解決問題,所以我們可以把它抽象為一類過程:

對要處理物件的列舉(enumerate)———對要處理物件的篩選(filter)———對物件的處理(map)———對處理後物件的累加(accumulate)

將其抽象為這一類問題的四個普適過程:

scheme**:

列舉(enumerate):

> (define (enumerate m)

(cond ((null? m) '())

((not (pair? m)) (list m))

(else

篩選(filter):

>(define (filter? proc  m)

(cond ((null? m)

'())

((null? (cdr m))

(if (proc m)

(cons m '())

'()))

(else

(if (proc (car m))

(cons (car m) (filter proc (cdr m)))

(filter proc? (cdr m))))))

處理(map):

> (define

(map proc m)

(cond ((null

? m) '())

((null? (cdr m)) (cons (proc (car m)) '()))

(else

(cons (proc (car m)) (map proc (cdr m))))))

累加(accumulate):

> (define

(accumulate m)

(if (null

? (cdr m))

(car m)

(+ (car m) (accumulate (cdr m)))))

那麼這種模組化後的過程將解決一系列相似過程中的問題。

那麼抽象後的scheme**:

> (define

(even_fibs n)

(accumulate

(map fib

(fliter

(enumerate n)))))

GridMask 一種資料增強方法

gridmask data augmentation,arxiv 2020 這篇 提出了一種簡單的資料增強方法,在影象分類 檢測 分割三個任務進行實驗,效果提公升明顯。作者首先回顧了資料增強 data augmentation 方法,指出當前方法有三類 spatial transformation,...

大資料處理時的一種BitMap小演算法

一種大資料外部排序 記憶體無法載入所有排序元素 去除重複元素 快速找到隨機被刪除元素的bitmap小演算法,核心思想即通過將乙個數作為下標 index 來索引乙個bit表示乙個數是否存在,排序時的時間複雜度為o n 需要的額外空間的複雜度o n 8 支援整個int範圍 正負數都支援 的演算法示例如下...

樹 一種資料結構(二)

通過樹形結構的構造,進行組合設計模式 composite 的實現 node作為基類 本身不持有資料,用於維護共同的節點結構 class node protected node size t id,boost shared ptrp parent p id id 通過建構函式傳遞進來的父類指標建立與其...