列表中的最大数
你好如何在包含实数的列表中获得最大数
说(setq lst’(5.2 6.7 8.9)
_$ (vl-load-com)
_$ (setq lst '(5.2 6.7 8.9 )
(5.2 6.7 8.9
_$ (setq newLst (vl-sort lst '>))
(8.9 8 6.7 5.2)
_$ (car newLst)
8.9
_$
(apply 'max lst)
实例
(apply 'max '(1 2 3 -4 5))
回报:5 荣誉我忘记了最小值/最大值。
FWIW-通过使用MAX(尽可能小)有轻微的速度增益:
_$ (defun _max (lst) (apply 'max lst))
_MAX
_$ (defun _vl-sort (lst) (car (vl-sort lst '>)))
_VL-SORT
_$ (bench '(_max _vl-sort) (list '(5.2 6.7 8.9 ) 100000)
_MAX
Elapsed: 452
Average: 0.0045
_VL-SORT
Elapsed: 483
Average: 0.0048
_$
感谢KOWal和blackbox的回复 apply的更详细形式是:
(eval (cons 'max lst))
-大卫 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 IncrementTime(ms) NormalizeRelative
--------------------------------------------------------------------------------
(_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 IncrementTime(ms) NormalizeRelative
--------------------------------------------------------------------------------
(_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 IncrementTime(ms) NormalizeRelative
--------------------------------------------------------------------------------
(_MAX LST) 32768 1981 1981 26.72
(_VL-SORT LST) 1024 1654 52928 1.00
--------------------------------------------------------------------------------
页:
[1]