Rust 编写的化学方程式配平库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
LEXUGE
V2EX    程序员

Rust 编写的化学方程式配平库

  •  
  •   LEXUGE
    LEXUGE 2018-05-19 08:14:58 +08:00 5478 次点击
    这是一个创建于 2703 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近用 Rust 编写了一个化学方程式的配平库。
    主要的算法实现是 基于正则的 Parser 和高斯-约当消元算法

    整个 lib 原生使用 generic type,所以支持各种需求的超大运算。

    Github 地址:
    lib_xch (算法实现库)
    xch-ceb (调用库的实现)

    欢迎提出意见与建议以及求 Star 可以有理由地提出批评

    25 条回复    2018-05-21 20:08:38 +08:00
    frozenthrone
        1
    frozenthrone  
       2018-05-19 08:51:07 +08:00 via iPhone
    666
    LEXUGE
        2
    LEXUGE  
    OP
       2018-05-19 09:22:15 +08:00
    感谢大家的支持
    尽管这个项目对工业生产没什么用
    YuuuZeee
        3
    YuuuZeee  
       2018-05-19 09:24:59 +08:00
    好厉害!!!
    LEXUGE
        4
    LEXUGE  
    OP
       2018-05-19 09:30:17 +08:00
    @YuuuZeee 看了一下你的项目,过奖了
    muziki
        5
    muziki  
       2018-05-19 09:33:18 +08:00 via iPhone
    legal_check_util 里面的 check_char 可以用 pattern matching 重写一下
    muziki
        6
    muziki  
       2018-05-19 09:42:49 +08:00 via iPhone
    有些 vec::new 操作能估计出最低开销的话用 with_capacity 能快一点(不过性能影响不大就是了)
    LEXUGE
        7
    LEXUGE  
    OP
       2018-05-19 09:48:07 +08:00
    @muziki 嗯,好的,会改进的
    之前没有了解过 pattern matching.....
    LEXUGE
        8
    LEXUGE  
    OP
       2018-05-19 09:50:16 +08:00
    @muziki 这个我觉得性能损失不大?
    muziki
        9
    muziki  
       2018-05-19 09:52:59 +08:00 via iPhone
    嗯,这种程度的操作几乎忽略不计
    输出的数据考虑用 serde 封装一下?现在的数据结构有点儿 raw
    LEXUGE
        10
    LEXUGE  
    OP
       2018-05-19 10:20:56 +08:00
    @muziki 初学 Rust,全都用了 Result,我了解之后会改进的
    wspsxing
        11
    wspsxing  
       2018-05-19 10:23:42 +08:00 via Android
    厉害啊,化学方程式都出来了
    LEXUGE
        12
    LEXUGE  
    OP
       2018-05-19 10:25:10 +08:00
    @muziki 你是指 handler_api 的结果吗?
    这个规模用 struct 也还好吧。如果将来返回复杂了,我会使用 serde 的。
    Brucepac
        13
    Brucepac  
       2018-05-19 11:05:56 +08:00
    看到了楼主的博客,小伙子,年轻有为啊
    LEXUGE
        14
    LEXUGE  
    OP
       2018-05-19 11:07:38 +08:00
    LEXUGE
        15
    LEXUGE  
    OP
       2018-05-19 11:08:09 +08:00
    @Brucepac 也只是随意折腾,没什么实际水平,参加 OI 的才厉害
    changwei
        16
    changwei  
       2018-05-19 14:21:47 +08:00 via Android
    要是我读中学的时候就有这个库,嘿嘿嘿
    cyancat0525
        17
    cyancat0525  
       2018-05-19 14:44:30 +08:00 via Android
    @changwei 可能上不了大学?
    XiaoJSoft
        18
    XiaoJSoft  
       2018-05-19 15:11:45 +08:00
    之前写的,可供参考: https://github.com/bce-toolkit/bce
    LEXUGE
        19
    LEXUGE  
    OP
       2018-05-20 07:30:35 +08:00
    @XiaoJSoft 谢谢
    遇到前辈了
    LEXUGE
        20
    LEXUGE  
    OP
       2018-05-20 07:36:58 +08:00
    @cyancat0525 有可能。。。
    geelaw
        21
    geelaw  
       2018-05-20 14:56:42 +08:00
    我小时候也喜欢玩这个 (★ ω ★) [不过我是坚定的 C family 使用者,而且当时 regex 还不是标准,所以是手工写 lexer 和 parser

    不过实际上我有遇到过不满秩的方程(在考试里还是什么的),需要质量守恒定律之外的内容才能配平的情况。
    LEXUGE
        22
    LEXUGE  
    OP
       2018-05-20 15:04:39 +08:00
    @geelaw 我在测试的时候也遇到过
    在设计算法时看相关论文也提到过,但是因为数量少,所以就忽略了。至今未找到解决方案。。。
    XiaoJSoft
        23
    XiaoJSoft  
       2018-05-20 21:02:54 +08:00
    @LEXUGE 这一方面我有解决...方案是输出通解(关键字:基础解系)...可以参考我的程序,当然未必能满足所有人的需求,但就目前而言应该是你能找到的类似程序中最好的,所以你可以参考我的一些做法来拿 Rust 重写一份。
    商业化未尝不可,但是你得知道到底是谁需要这个。举个例子,这个程序的最初模型是拿 VB 写的,我放到了 GoogleCode 上,然后前几年有几个中学的化学老师把它改成了 Office 插件(不好意思相关页面找不到了,我忘加收藏夹了),你看这不就是一个很好的思路吗...
    像我这边的商业尝试虽然不能太透露给你,不过我可以说如果你做好了以后是可以在工业和教学上使用的。如果你喜欢的话可以考虑更深入一些,可以参考 EPAM 公司的开源产品( Indigo 之类的)。
    另附我的程序的 OSC 页面: https://www.oschina.net/p/bce
    GitHub 之前发过了就不再说了...
    XiaoJSoft
        24
    XiaoJSoft  
       2018-05-20 21:16:30 +08:00
    @LEXUGE 另外,自己写 Parser 是有必要的(或者至少是使用 Yacc 之类的东西),前提是你打算把这个项目一直做下去的话。到后期你会觉得 AST 这种神奇的东西真的是很有用的。比如当你需要把方程式渲染成 Web 页面可以显示的东西或者是 Latex 之类的东西的话这种就很有用了。
    总之,要搞这个的话学好线性代数和编译原理是肯定没错的啦 ~
    LEXUGE
        25
    LEXUGE  
    OP
       2018-05-21 20:08:38 +08:00
    @XiaoJSoft 嗯,感谢前辈指点
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2504 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 15:26 PVG 23:26 LAX 08:26 JFK 11:26
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86