因为我躺床上也想了很久都没有结果(都是一些比较浅层的结论,似乎靠树形图 也没有特别多的效果)
思量着 要上 可视化 拿命分析 只要分析完能力能有提升,哪怕以后都要拿命分析 也在所不辞
思量着 要上 可视化 拿命分析 只要分析完能力能有提升,哪怕以后都要拿命分析 也在所不辞
XjbBcj.hs
1.4 KB
#Haskell #Algorithm 仅仅是比原版换了一点命名大概,主体逻辑没有区别,但即使是模板 弄不懂的话 也是没有意义的呢。
/tmp/duangsuse.sock
#Haskell XJB 写的树状数组离散化并查集,不过是抄的...(默写的) 自己还不是很理解,看看
来看一下我们的测试题目。首先是初始化并查集内容(Zi=1)部分
是数组 离散化 存储的一个树,数组是一个 mapping,K 是 Int, V 是 Int
a=1; b=2, 先去找两个 deep ancestor: ap, bp
拿到的肯定是 vec[1] vec[2] 本身(n == i)
然后去存 nodes[1].parent = nodes[2] 就发现 1 和 2 是一锅的
3 4 同理,n[3].parent = n[4]; n[4].parent = nil(4)
2 3 的话,就体现 优化,要找爸爸树
2 的话,找到 n[2] (是 1 的爹),然后它是爹的 child
3 的话,找到 n[3] (是 4 的 娃),然后它的爹就是 4, 顺带传递性相等, n[3] 的爹 也是 4 肯定
n[3] = n[4]
这样的话,A={1,3,2} B={2,4,3}
首先就是构造这种 爹树
1 -> 2
2 -> 2 (inserting 2, 3)
2 -> nil
3 -> 4
3 -> 4 (inserting 2, 3)
4 -> nil
集合并的是那 (A | B) = {1,2,4},那就发现其实 22 33 都没有意义,为什么不当自己的爹,剪掉
那并还有 B 没有的 为什么不直接用空间 保存住,可是不是分开保存的
必须是树,在一起的话 有一个爹 不是一集人不认一个爹,那爹是怎么一起认的呢?就是当儿子、合并
那如何查找爹树?
1 2 是否在同一集合内?
1 -> 2
2 -> 2 那都是一个爹的 娃,是
2 3 是否在一个集合呢?
2 -> 2 可是 3 是否有一个爹呢?
3 -> 4 -> 4 没有一个爹(找完了都
3 4 是否呢?
3 -> 4
4 -> 4
有一个爹,是一集和的 爹(
O A B现在这个集合里 应该怎么样呢?
1 1 2
1 3 4
1 2 3
是数组 离散化 存储的一个树,数组是一个 mapping,K 是 Int, V 是 Int
a=1; b=2, 先去找两个 deep ancestor: ap, bp
拿到的肯定是 vec[1] vec[2] 本身(n == i)
然后去存 nodes[1].parent = nodes[2] 就发现 1 和 2 是一锅的
3 4 同理,n[3].parent = n[4]; n[4].parent = nil(4)
2 3 的话,就体现 优化,要找爸爸树
2 的话,找到 n[2] (是 1 的爹),然后它是爹的 child
3 的话,找到 n[3] (是 4 的 娃),然后它的爹就是 4, 顺带传递性相等, n[3] 的爹 也是 4 肯定
n[3] = n[4]
这样的话,A={1,3,2} B={2,4,3}
首先就是构造这种 爹树
1 -> 2
2 -> 2 (inserting 2, 3)
2 -> nil
3 -> 4
3 -> 4 (inserting 2, 3)
4 -> nil
集合并的是那 (A | B) = {1,2,4},那就发现其实 22 33 都没有意义,为什么不当自己的爹,剪掉
那并还有 B 没有的 为什么不直接用空间 保存住,可是不是分开保存的
必须是树,在一起的话 有一个爹 不是一集人不认一个爹,那爹是怎么一起认的呢?就是当儿子、合并
那如何查找爹树?
1 2 是否在同一集合内?
1 -> 2
2 -> 2 那都是一个爹的 娃,是
2 3 是否在一个集合呢?
2 -> 2 可是 3 是否有一个爹呢?
3 -> 4 -> 4 没有一个爹(找完了都
3 4 是否呢?
3 -> 4
4 -> 4
有一个爹,是一集和的 爹(
Forwarded from Deleted Account
... 就是 merge 的时候 deep merge 找野爹(跑,是最远的爹)然后每层都去建立传递关系
find 的时候问野(爹 是否是一个爹(之前同集合的都传递了)
每个数 都可能是别人的爸爸(喜当爹,逃
find 的时候问野(爹 是否是一个爹(之前同集合的都传递了)
每个数 都可能是别人的爸爸(喜当爹,逃
Forwarded from Deleted Account
有点 LuaOOP 虚表继承的感觉,每个树都可能有爹,爹有很多儿子、爹只能有一个爹
Forwarded from Deleted Account
虚表是每次递归查找到了复制,并查树也是
两者都是传递性,不过一个是为了缓存(也是性质)传递、一个是一元相关性传递
两者都是传递性,不过一个是为了缓存(也是性质)传递、一个是一元相关性传递
Forwarded from Deleted Account
cats 就是找某个 node 最远的爹,然后一下解决所有娃子的传递性问题,concat 到一起去
对应的 find 实现是为了践行这个理念,顺便有缓存剪枝
可是具体的,比如 find 的
对应的 find 实现是为了践行这个理念,顺便有缓存剪枝
可是具体的,比如 find 的
(make me dptr) 到底是不是删掉也正确,不清楚...我终于知道为什么很多出版物里都能找到不完美的地方了,原来尽可能去修改就有这么难啊...
本来已经修改了很多地方,换掉了不少有问题或者可以改进的表达,再看一遍,我又找到比原来还多数目的...
本来已经修改了很多地方,换掉了不少有问题或者可以改进的表达,再看一遍,我又找到比原来还多数目的...
目前我依然在修改,将在基本完成后对内容进行最后的校验
今天明天内,我会给它加一些 JavaScript 小挂件来提升阅读体验
目前还在对内容进行校对
今天明天内,我会给它加一些 JavaScript 小挂件来提升阅读体验
目前还在对内容进行校对
Forwarded from 荔枝木
“我的朋友们啊,”他说,“我——我——”
但是他哽住了,他说不下去了。
他转身朝着黑板,拿起一支粉笔,使出全身的力量,写了四个大字:“熊猫万岁!”
然后他呆在那儿,头靠着墙壁,话也不说,只向我们做了一个手势:“关站了,你们走吧。”
但是他哽住了,他说不下去了。
他转身朝着黑板,拿起一支粉笔,使出全身的力量,写了四个大字:“熊猫万岁!”
然后他呆在那儿,头靠着墙壁,话也不说,只向我们做了一个手势:“关站了,你们走吧。”
刚才被冰封批判了一番,两年进步的的确是很少了(
我还有脸讲什么 #Haskell, Monad 都不会
连 Identity/Reader Monad 都还无法默写,真是...
而且我还没有拿 Haskell 写过解释器,一个计算器求值的都是常量、纯的无参表达式,这怎么能叫做解释器呢...
推荐大家去关注 github.com/HoshinoTented 大佬,大小姐很擅长各种算法和 Kotlin... 和 Haskell,我就只是会点无聊的... 泪目
我还有脸讲什么 #Haskell, Monad 都不会
连 Identity/Reader Monad 都还无法默写,真是...
而且我还没有拿 Haskell 写过解释器,一个计算器求值的都是常量、纯的无参表达式,这怎么能叫做解释器呢...
推荐大家去关注 github.com/HoshinoTented 大佬,大小姐很擅长各种算法和 Kotlin... 和 Haskell,我就只是会点无聊的... 泪目
GitHub
HoshinoTented - Overview
impl !Ord for Self {}. HoshinoTented has 41 repositories available. Follow their code on GitHub.
https://blog.hoshino9.org/2019/07/26/how-to-create-a-wonderful-type.html
艹,刚才看星野野大佬的博文才知道
就只告诉我
艹,刚才看星野野大佬的博文才知道
newtype 是简易 Product 的构造方法(不能是 Sum type),之前欧阳继超大佬的猫论指南就只告诉我
newtype 是定义同构类型(newtype Identity a = Identity { runIdentity :: a })...blog.hoshino9.org
Haskell 如何打造爆款数据类型
数据类型是 Haskell 中的重要知识之一这篇文章讲教你从一无所知到随手打造爆款数据类型
啊,那个我没有考虑到,其实... 写的插件还可以讲一下,所以前端给 #HTML #JavaScript
之前因为 Fx 阅读模式里面 link anchor 有 underline(decoration) 所以想加去这个的 CSS,后来才知道本来就没有...
如果有的话,可以
首先是 NSFW Template,这使用到了 HTML5 的新 <template> tag
bound 本来确实可以利用 property/reflect/proxy 来比较魔法的(而且不会担心性能问题,可以缓存)
不过有点长,而且不明显,所以这里用简单的方法
== Abbr view
这个逻辑比较简单,类似 NSFW template。因为在一些设备上不能使用 "hover" 查看 abbrev... 只好在点击时在后面插入内 abbr 的实际容了。
写入的时候先新建一个 attribute,用于记录 abbr 已经被展开,每次 switch 的时候判断一下 shown => hide、hidden => show
== Night
== Reflink Preview
== Music Player
== Footnote Xref
== Contents Tree
之前因为 Fx 阅读模式里面 link anchor 有 underline(decoration) 所以想加去这个的 CSS,后来才知道本来就没有...
如果有的话,可以
a { text-decoration: none; }
接下来简要说说几个小辅助插件了首先是 NSFW Template,这使用到了 HTML5 的新 <template> tag
bound 本来确实可以利用 property/reflect/proxy 来比较魔法的(而且不会担心性能问题,可以缓存)
不过有点长,而且不明显,所以这里用简单的方法
function bound(self, meth) { return self[meth].bind(self); }
function intoIter(xs) { var i = 0;
return function
iterator() { return (i<xs.length)? { value: xs[i++], done: false }
: {done:true}; }; }
function tryIter(xs) { if (!Symbol) return intoIter(xs); return bound(xs[Symbol.iterator](), 'next'); }
function forIter(it, f) { var xc; while (xc = it()) { f(xc.value); if (xc.done) break; } }
function args2ary(argsv) { var ary=[]; forIter(tryIter(argsv), bound(ary, 'push')); return ary; }
Function.prototype.flip = function() { var method = this; return function call() { return method.apply(method, args2ary(arguments).reverse()); }; };
Function.prototype.curry1 = function(x0) { return this.bind(this, x0); }
;
Object.prototype.lets = function(f) { return f(this); }
Function.prototype.andThen = function(g) { var f=this; return function composition(x) { return g(f(x)); }; }
foreach = tryIter.andThen(bound(forIter, 'curry1'));
function makes$_(fname) { return function(it) { return it[fname](); }; }
function makes_() {
var it = new Object();
return new Proxy(it, { get: function(t,a,p){return makes$_(a);} });
}
_ = makes_();
cssSelect = bound(document, 'querySelector');
var merges = bound(document, 'importNode').flip().curry1(true);
其中业务逻辑 部分,上面的留作代码重用function showTemplate(attr, init) {
var templates = cssSelect('template[' + attr + ']=""');
var prepend = function (nd, x) { nd.parentNode.insertBefore(x, nd); };
templates.forEach(function(x) {
var mix = merges(x.content);
if (typeof init =='function') init(mix);
prepend(x, mix);
});
}
function removeElements(cs) { cs.lets(cssSelect).each(_.delete); }
function addCSSClass(cl) { return function(e){ e.classList.add(cl); }; }
showTemplate('nsfw', addCSSClass('nsfw'));
我还得写很多.... 所以代码重用、优先划分好模块非常重要== Abbr view
这个逻辑比较简单,类似 NSFW template。因为在一些设备上不能使用 "hover" 查看 abbrev... 只好在点击时在后面插入内 abbr 的实际容了。
写入的时候先新建一个 attribute,用于记录 abbr 已经被展开,每次 switch 的时候判断一下 shown => hide、hidden => show
== Night
== Reflink Preview
== Music Player
== Footnote Xref
== Contents Tree
/tmp/duangsuse.sock
啊,那个我没有考虑到,其实... 写的插件还可以讲一下,所以前端给 #HTML #JavaScript 之前因为 Fx 阅读模式里面 link anchor 有 underline(decoration) 所以想加去这个的 CSS,后来才知道本来就没有... 如果有的话,可以 a { text-decoration: none; } 接下来简要说说几个小辅助插件了 首先是 NSFW Template,这使用到了 HTML5 的新 <template> tag bound 本来确实可以利用 prope…
... 我不该写 js 的,虽然好像我总是写错代码.... 怎么连 bounds 都忘记了
另外 JavaScript 想写简洁真难啊,看起来明明可以 point-free 的话 就不得不引入新匿名函数了
另外 JavaScript 想写简洁真难啊,看起来明明可以 point-free 的话 就不得不引入新匿名函数了