zoukankan      html  css  js  c++  java
  • [ Skill ] 对一个 list 中的元素去重 ( artUnique 改进版本 )

    https://www.cnblogs.com/yeungchie/

    替代内置函数 artUnique ,解决浮点数运算误差造成的去重不彻底。
    具体的原因可以看这里 为什么浮点运算有误差?

    • code
    /************************************
    *                                   *
    *   Program   :  ycUnique.il        *
    *   Language  :  Cadence Skill      *
    *   Author    :  YEUNGCHIE          *
    *   Version   :  2020.10.20         *
    *                                   *
    ************************************/
    procedure(ycUnique(dbList @optional eps(1e-10) "ln")
        prog((uniqueList)
            foreach(x dbList
                prog((numbers delta)
                    unless(member(x uniqueList)
                        when(numberp(x)
                            numbers = setof(v uniqueList numberp(v))
                            when(numbers
                                foreach(num numbers
                                    delta = abs(num - x)
                                    when(delta < eps || delta - eps < 1e-10
                                        return()
                                    )
                                )
                            )
                        )
                        uniqueList = append1(uniqueList x)
                    )
                );prog
            )
            return(uniqueList)
        );prog
    );ycUnique
    
    • describe

      dbList 为输入 list

      eps 为输入数字,指定判定精度,默认值为 (1e^{-10})

    • example

    ;bad case
    artUnique(list(4.0 1.2/(0.1+0.2)))
    

    ycUnique(list(4.0 1.2/(0.1+0.2)))
    

    ycUnique(list(1 2 3 5 7 8 9) 2)
    

  • 相关阅读:
    Codeforces Round #439 (Div. 2)
    Money Systems
    Stamps
    inflate
    多重背包问题
    AIM Tech Round 4 (Div. 2)
    September Challenge 2017
    树的重心
    百度之星2017初赛A
    树上的最大独立集
  • 原文地址:https://www.cnblogs.com/yeungchie/p/13849255.html
Copyright © 2011-2022 走看看