乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 22|回复: 6

[编程交流] 列表中的最大数

[复制链接]

63

主题

242

帖子

181

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
319
发表于 2022-7-6 06:13:56 | 显示全部楼层 |阅读模式
你好
如何在包含实数的列表中获得最大数
说(setq lst’(5.2 6.7 8.9)
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 06:25:38 | 显示全部楼层
  1. _$ (vl-load-com)
  2. _$ (setq lst '(5.2 6.7 8.9 )
  3. (5.2 6.7 8.9
  4. _$ (setq newLst (vl-sort lst '>))
  5. (8.9 8 6.7 5.2)
  6. _$ (car newLst)
  7. 8.9
  8. _$
回复

使用道具 举报

46

主题

92

帖子

45

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
235
发表于 2022-7-6 06:39:36 | 显示全部楼层
  1. (apply 'max lst)

实例
  1. (apply 'max '(1 2 3 -4 5))

回报:5
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 06:45:41 | 显示全部楼层
荣誉我忘记了最小值/最大值。
 
FWIW-通过使用MAX(尽可能小)有轻微的速度增益:
 
  1. _$ (defun _max (lst) (apply 'max lst))
  2. _MAX
  3. _$ (defun _vl-sort (lst) (car (vl-sort lst '>)))
  4. _VL-SORT
  5. _$ (bench '(_max _vl-sort) (list '(5.2 6.7 8.9 ) 100000)
  6. _MAX
  7. Elapsed: 452
  8. Average: 0.0045
  9. _VL-SORT
  10. Elapsed: 483
  11. Average: 0.0048
  12. _$
回复

使用道具 举报

63

主题

242

帖子

181

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
319
发表于 2022-7-6 06:58:49 | 显示全部楼层
感谢KOWal和blackbox的回复
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 07:04:11 | 显示全部楼层
apply的更详细形式是:
 
  1. (eval (cons 'max lst))

 
-大卫
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-16 09:38 , Processed in 2.571585 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表