duangsuse::Echo
#Math (线性代数 领域)齐次线性方程组(homogeneous linear equations ) 常数项全为0的n元线性方程组(也即齐次线性方程组) 是什么样的呢? equation = { a11 x1 + a12 x2 + ... + a(10)n xn = 0, a21 x1 + a22 x2 + ... + a(20)n xn = 0, ... am1 x1 + ... + amn xn = 0 } 涉及的矩阵 a 包含矩阵类型的元素,索引 [m, n] m 为等式矩阵的行号,n…
🤔 那么,既然我们知道了这种数学算法,而且又知道它可以被计算机求解,怎么写出对应的算法呢?
首先看看我们的问题:我们要解类似下面这种
首先看看我们的问题:我们要解类似下面这种
齐次线性方程组
hle1 = {
x1 - 3x2 + x4 = 0,
x1 + 2x2 - x3 - x4 = 0,
x2 + 2x3 - 2x4 = 0
}
它可以被抽象为以下形式,便于变换:typealias Real = Double我们可以写一个函数来 dump 这种数据结构
class HomogeneousLinearEquation {
// v[m, 1] * x[1] + .. + v[m, n] * x[n] = 0
val co: Vector</* m */Vector</* n */Real>>
val vx: Vector</* n */Real>
}
fun HmomgeneousLinearEquation.toString(): String {
val sb = StringBuilder()
val r = co.size
val n = vx.size
for (m in 0..r-1) {
for (i in 0..n-1) {
sb.write(String.format("co[%d, %d] * x[%d] + ", m, n, n))
}
}
return sb.write("0 = 0").toString()
}
好吧,很不函数式,不过依然可以用,我们看看:
duangsuse::Echo
🤔 那么,既然我们知道了这种数学算法,而且又知道它可以被计算机求解,怎么写出对应的算法呢? 首先看看我们的问题:我们要解类似下面这种 齐次线性方程组 hle1 = { x1 - 3x2 + x4 = 0, x1 + 2x2 - x3 - x4 = 0, x2 + 2x3 - 2x4 = 0 } 它可以被抽象为以下形式,便于变换: typealias Real = Double class HomogeneousLinearEquation { // v[m, 1] * x[1] +…
既然是这么学术(迫真)的东西就用 Haskell 好了(大嘘) 🙈
虽然数学不好驾驭不了 Haskell
就后端来看,一个 HLEs 实际上是由一组常数为零的多项式构成的,也就是说
那么使用这种很不方便的数据结构(因为后面的变形可能会证明这么抽象是很麻烦很不 effective 的,不过这里只是演示就不考虑性能问题,随便瞎 🐔 玩)
可以这么表示我们要处理的对象
虽然数学不好驾驭不了 Haskell
module HomogenLineq where那么我们也可以修改一下自己的建模,就语法解析前端来看,我们认为只存在 + 和 * 两种组合方式,组合的目标是 Int 或者组合结果本身,而 - 和 / 分别使用负数和分数来解决
就后端来看,一个 HLEs 实际上是由一组常数为零的多项式构成的,也就是说
data HomogenLineqGroup = List HomogenLineq
而一个 HLE 则是由一打系数和未知数索引(这里我的描述方法)构成的,他们之间使用 + 组合data HomogenLineq = List Monomial
data Monomial = MulCoeffX Num Num 那么使用这种很不方便的数据结构(因为后面的变形可能会证明这么抽象是很麻烦很不 effective 的,不过这里只是演示就不考虑性能问题,随便瞎 🐔 玩)
可以这么表示我们要处理的对象
hle1 = [MulCoeffX 1 1, MulCoeffX (-3) 2, MulCoeffX 0 3, MulCoeffX 1 4] : [MulCoeffX 1 1, MulCoeffX 2 2, MulCoeffX (-1) 3, MulCoeffX (-1) 4] : [MulCoeffX 0 1, MulCoeffX 1 2, MulCoeffX 2 3, MulCoeffX (-2) 4] : []
所以有{-- v[m, 1] * x[1] + ... + v[m, n] * x[n] = 0 --}
module HomogenLineq where
{-- v[m, n] * x[n] --}
data MonomialMultiplication a = MulCoeffX a a
type Monomial = MonomialMultiplication Int
{-- v[m, n] * x[n] + ... --}
type HomogenLineq = [Monomial]
type HomogenLineqGroup = [HomogenLineq]
hle1 :: HomogenLineqGroup
hle1 = [MulCoeffX 1 1, MulCoeffX (-3) 2, MulCoeffX 0 3, MulCoeffX 1 4] : [MulCoeffX 1 1, MulCoeffX 2 2, MulCoeffX (-1) 3, MulCoeffX (-1) 4] : [MulCoeffX 0 1, MulCoeffX 1 2, MulCoeffX 2 3, MulCoeffX (-2) 4] : []
dumpItem :: Show t => MonomialMultiplication t -> String
dumpItem (MulCoeffX coe x) = "(" ++ show coe ++ "*x" ++ show x ++ ")"
dumpEquation :: HomogenLineq -> String
dumpEquation = foldr (\s tl -> dumpItem s ++ " + " ++ tl) "0 = 0"
dumpEquations :: HomogenLineqGroup -> String
dumpEquations = foldr (\l tl -> " " ++ dumpEquation l ++ "," ++ nl tl ++ tl) ""
where nl tl = if length tl == 0 then "" else "\n"
dump' :: String -> HomogenLineqGroup -> String
dump' name g = name ++ " = {\n" ++ dumpEquations g ++ "\n}"
dump :: HomogenLineqGroup -> String
dump = dump' "(anon)"This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse::Echo
既然是这么学术(迫真)的东西就用 Haskell 好了(大嘘) 🙈 虽然数学不好驾驭不了 Haskell module HomogenLineq where 那么我们也可以修改一下自己的建模,就语法解析前端来看,我们认为只存在 + 和 * 两种组合方式,组合的目标是 Int 或者组合结果本身,而 - 和 / 分别使用负数和分数来解决 就后端来看,一个 HLEs 实际上是由一组常数为零的多项式构成的,也就是说 data HomogenLineqGroup = List HomogenLineq 而一个…
*HomogenLineq> (putStrLn . dump) hle1
(anon) = {
(1*x1) + (-3*x2) + (0*x3) + (1*x4) + 0 = 0,
(1*x1) + (2*x2) + (-1*x3) + (-1*x4) + 0 = 0,
(0*x1) + (1*x2) + (2*x3) + (-2*x4) + 0 = 0,
}
duangsuse::Echo
#Math (线性代数 领域)齐次线性方程组(homogeneous linear equations ) 常数项全为0的n元线性方程组(也即齐次线性方程组) 是什么样的呢? equation = { a11 x1 + a12 x2 + ... + a(10)n xn = 0, a21 x1 + a22 x2 + ... + a(20)n xn = 0, ... am1 x1 + ... + amn xn = 0 } 涉及的矩阵 a 包含矩阵类型的元素,索引 [m, n] m 为等式矩阵的行号,n…
所以现在我连变形『前端』(解析器)的工作都还没有完成,然后只写了点模式化的代码... 累了 🌝
不知道,或许可以看这里
但我真的不熟悉 Haskell 啊... 别说范畴论和 Monad 了,就是普通一点的算法列表 / Records / Tuple 处理向的都不会...
又要用 Data.Map... Haskell 是非常理论的,
变形到
还是好好学 Rust?(‘
v = [到
[1, -3, 0, 1],
[1, 2, -1, -1],
[0, 1, 2, -2]
]
v' = [该怎么办?
[1, 0, 0, -7/11],
[0, 1, 0, -6/11],
[0, 0, 1, -8/11]
]
不知道,或许可以看这里
但我真的不熟悉 Haskell 啊... 别说范畴论和 Monad 了,就是普通一点的算法列表 / Records / Tuple 处理向的都不会...
又要用 Data.Map... Haskell 是非常理论的,
Data.Map 就是 LinkedMap 而已嘛。空间还蛮省的,就是 O(n) 时间复杂度大了点变形到
fin = {
x1 + (0)x2 + (0)x3 - (-7/11)x4 = 0,
(0)x1 + x2 + (0)x3 - (-6/11)x4 = 0,
(0)x1 + (0)x2 + x3 - (-8/11)x4 = 0,
}
只需要一点基础的数学功底,但我有点不清楚表达式该怎么写,把所有 x1-x3 相乘再 / x4?还是好好学 Rust?(‘
Baidu
初等变换_百度百科
初等变换(elementary transformation)是三种基本的变换,出现在《高等代数》中。初等变换包括:线性方程组的初等变换、行列式的初等变换和矩阵的初等变换,这三者在本质上是一样的。...
HomogenLineq.hs
1.8 KB
Harry Ying
XCH.C
附注,他为自己的算法专门排了篇论文,在这里可以阅读
博文在这里 https://lexuge.github.io/jekyll/update/2018/02/20/XCH%E7%99%BD%E7%9A%AE%E4%B9%A6.html
博文在这里 https://lexuge.github.io/jekyll/update/2018/02/20/XCH%E7%99%BD%E7%9A%AE%E4%B9%A6.html
duangsuse::Echo
duangsuse 看完之后的评价: 👎 真 TMD 傻逼。(实锤) 先上这些 title: APP还在用域名连接后端?用IP提速N倍! author: 58沈剑 架构师之路 (会做这种 overdesign 的果不其然是某些大厂子的『架构师』呵呵) abstract: 无线时代,网络稳定性差,应用流量敏感,APP与Server之间每次HTTP请求都需要进行DNS解析,有没有可能直接使用IP来提速呢? keywords: HTTP, Nginx, 负载均衡, DNS, 水平扩展, 反向代理, Tomcat…
#Rust #blog #net #Performance https://lexuge.github.io/jekyll/update/2018/07/24/lib_blaster%E4%BC%98%E5%8C%96%E7%AC%94%E8%AE%B0.html
https://www.cnblogs.com/conmajia/p/no-overdesign-just-experiment.html
再看看您这个优化的 🐔 呢?连 dns 解析到底花了多少时间都不知道!
https://www.cnblogs.com/conmajia/p/no-overdesign-just-experiment.html
再看看您这个优化的 🐔 呢?连 dns 解析到底花了多少时间都不知道!
lexuge.github.io
lib_blaster优化笔记
lib_blaster 是一个我用 Rust 编写的 SYN flood 概念验证(Proof of Concept) 的库。为追求极致的性能,我对它作了大量优化,达到了一定的效果。这是我对优化过程的记录。
Harry Ying
XCH.C
这个使用的算法就是暴力搜索(从 0 枚举到 n,不停枚举化学配平系数、然后算粒子个数对比,成功就好,不成功继续下一轮),总的来看其实它作为解析器的部分是最有价值的...
虽然的确和作者说的一样,是比较烂的代码(虽然是 C 写的,比较底层)
但是看了一会也勉强能找到逻辑,解析器什么的我其实也会写,我写的第一个能嵌套的解析器使用的 subsequence 方法和这个里面实现的一致
暴力查找算法的入口在 366 行,
当然,你们上面拿到的那个是后来的改进版,它不需要你手动算上面要求输入的数据自己输了,你可以直接输入配平等式,解析器前端
虽然的确和作者说的一样,是比较烂的代码(虽然是 C 写的,比较底层)
但是看了一会也勉强能找到逻辑,解析器什么的我其实也会写,我写的第一个能嵌套的解析器使用的 subsequence 方法和这个里面实现的一致
暴力查找算法的入口在 366 行,
int check();
int check_int_exp(int alpha,int beta,int mode)[lexuge@localhost XCH]$ ./XCH
{
bool ans=false;
int c=0;
if (mode==1) ans=__builtin_sadd_overflow(alpha,beta,&c);
if (mode==2) ans=__builtin_smul_overflow(alpha,beta,&c);
if (ans==true) wrong_exit(6);
return 0;
}
XCH - Chemical Equation Balancerhttps://lexuge.github.io/jekyll/update/2017/03/12/XCH-%E5%8C%96%E5%AD%A6%E6%96%B9%E7%A8%8B%E5%BC%8F%E9%85%8D%E5%B9%B3%E7%A8%8B%E5%BA%8F.html
By LEXUGE
Copyright (2017-2017) LEXUGE
The software is using GPL(https://www.gnu.org/licenses/gpl.txt)
------Input------
输入有几种元素种类,几个分子式,等号左边,右边的分子式个数:
5 6 3 3
输入每种元素包含的原子在方程式中各个分子式的个数:
2 0 0 1 0 0
3 0 0 0 0 1
0 1 0 0 1 0
0 0 1 3 0 2
0 0 1 0 2 0
输入搜索最大值:
50
------Output------
各分子式系数分别为:
1 6 12 2 6 3
当然,你们上面拿到的那个是后来的改进版,它不需要你手动算上面要求输入的数据自己输了,你可以直接输入配平等式,解析器前端
xch_parser() 可以解决数据的问题,不过我不知道『每种元素包含的原子在方程式中各个分子式的个数』是哪里来的,可能是把数据写外面了吧...
lexuge.github.io
XCH - 化学方程式配平程序
本软件遵守GPL协议发布 本程序可以用来进行化学方程式配平,下载地址见About页面 下面将介绍软件使用的核心算法: 程序通过暴力搜索化学方程式的各个分子式的系数来求解,纯数学解决
#dev 是啊,现在 DVCS 时代,比以前还没有 VCS 系统靠死版本迭代的时候,强多了。
Forwarded from Rachel 碎碎念 (IFTTT)
啊 不知道赞叹过多少次了 还是要赞叹一下 git
自己家两台电脑 + 学校电脑 要开始写代码了直接 git pull 然后干活就行(— Rachel (ノД`)シクシク (@tangrui003) March 9, 2019
自己家两台电脑 + 学校电脑 要开始写代码了直接 git pull 然后干活就行(— Rachel (ノД`)シクシク (@tangrui003) March 9, 2019
Twitter
Rachel (ノД`)シクシク
啊 不知道赞叹过多少次了 还是要赞叹一下 git 自己家两台电脑 + 学校电脑 要开始写代码了直接 git pull 然后干活就行(
Forwarded from neko1的个人频道
Telegram X 今日 beta 更新支持投票功能,在 Google play 里加入 tgx 的 beta 测试就可以更新啦
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from Rachel 碎碎念 (Rachel Sunset.)
Telegram
duangsuse::Echo
官方逼死同人你说呢 @vote?
还有个官方的 bot?
可它没有 official signature 啊
可它没有 official signature 啊