有乙個很簡單的問題:對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 通過建構函式傳遞進來的父類指標建立與其...