FWIW-列表越长,速度增益越大。排序为O(N log N),最大值为O(N)。因此,对于10个排序列表,需要(大约)10*log(10)2次迭代=10*3.321928≈ 33次;最多需要10次。100等于100*6.643856≈ 665对100。这些都是最坏的情况,所以区别并不是“那么”大。但是看看这个:- ;;; -------------------------------------------------------------------------------------
- ;;; Pseudo random number generator
- ;;; -------------------------------------------------------------------------------------
- ;;; seed : A number as the seed, nil to auto-generate
- ;;; Result: real value between 0.0 and 1.0
- ;;; -------------------------------------------------------------------------------------
- (defun Random (seed /)
- (/ (setq *random:seed*
- (setq seed (rem (+ (* 25173
- (cond (seed)
- (*random:seed*)
- ((getvar "DATE"))))
- 13849)
- 65536)))
- 65536.))
- (defun _max (lst) (apply 'max lst))
- (defun _vl-sort (lst) (car (vl-sort lst '>)))
- (defun doMaxBench (num / lst)
- (repeat num (setq lst (cons (Random nil) lst)))
- (princ "Calculating benchmark between max and sort for list of ")
- (princ num)
- (princ " items.\n")
- (quickbench '((_max lst) (_vl-sort lst))))
下面是测试:
- _$ (doMaxBench 10)
- Calculating benchmark for finding max number in a list of 10 items.
- Benchmarking .. done for 32768 iterations. Sorted from fastest.
- Statement Increment Time(ms) Normalize Relative
- --------------------------------------------------------------------------------
- (_MAX LST) 32768 1076 1076 1.09
- (_VL-SORT LST) 32768 1171 1171 1.00
- --------------------------------------------------------------------------------
- _$ (doMaxBench 100)
- Calculating benchmark for finding max number in a list of 100 items.
- Benchmarking .. done for 32768 iterations. Sorted from fastest.
- Statement Increment Time(ms) Normalize Relative
- --------------------------------------------------------------------------------
- (_MAX LST) 32768 1186 1186 3.68
- (_VL-SORT LST) 8192 1091 4364 1.00
- --------------------------------------------------------------------------------
- _$ (doMaxBench 1000)
- Calculating benchmark for finding max number in a list of 1000 items.
- Benchmarking .. done for 32768 iterations. Sorted from fastest.
- Statement Increment Time(ms) Normalize Relative
- --------------------------------------------------------------------------------
- (_MAX LST) 32768 1981 1981 26.72
- (_VL-SORT LST) 1024 1654 52928 1.00
- --------------------------------------------------------------------------------
|