duangsuse::Echo
718 subscribers
4.26K photos
130 videos
583 files
6.48K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
duangsuse::Echo
其实无视百度公司的其他行为来看,百度学术(xueshu.baidu.com) 还是可以用的 但是他们不重视知识产权,没有对知识最基本的敬畏,到了学术界还是一副对作者的权利的爱理不理的样子... 和以前对那些歌曲一个态度 它太强调免费了... 听起来就像是百度的尿性,养成了那么多死看着免费免费自 high 的网民,改不了啊。 这里有一个例子: http://xueshu.baidu.com/usercenter/paper/show?paperid=e0f4dfe28ad3be0897827fb00ad16791…
Schoolar 上可以找到和华为所谓 HCC 和 CM、某优化技术什么的相关的内容,但很可惜,都是基本不沾边,只是引用甚至部分内容里稍微提了下华为,而 research 也不是华为弄的

Compiler-inserted predicated tracing
https://patents.google.com/patent/US20110154309A1/en

Compiler with energy consumption profiling
https://patents.google.com/patent/US20090037887A1/en

然后这篇蛤为的论文就是某优化编译算法之前的理论?

Application scenario identification method, power consumption management method, apparatus, and terminal device
应用程序的应用情景识别
、功耗管理控制、设备和移动终端
https://patents.google.com/patent/US9813297B2/en
这排版测试还是失败了(
所以说,Firefox 才是最好的排版软件嘛( 真的的让人震惊
这个应该是自然语言处理和机器学习方面的可视化
duangsuse::Echo
这个应该是自然语言处理和机器学习方面的可视化
This media is not supported in your browser
VIEW IN TELEGRAM
说起来,弄了半天也没写半个字的实际内容,全搞排版测试什么的去了....
duangsuse::Echo
这个应该是自然语言处理和机器学习方面的可视化
所以说大佬实在不少,哭哭(但其实是好事... 大佬对社会都是“超值”的,就是我们这些菜鸡看了会自闭而已)
This media is not supported in your browser
VIEW IN TELEGRAM
可能是我这几个星期熬过最长的夜了...

虽然还是啥都没有做到
不过至少还是有努力过不后悔吧...(虽然肯定会很后悔为什么不等下个星期搞

虽然又是啥都没有完成,可是也完成了了一些东西呢。
#life
duangsuse::Echo
#Rust #PLT https://lexuge.github.io/ #recommended #blog
全英文
5 没有被手动排序过,5 排在 1 前面,4 被手动排序过,4 也在 1 前面,但 5 和 4 却无法得出谁在谁前

我... 其实我一直在想的是(没错,我记错了,但是这句话我一直在想一直在想... 我真的不知道到底是哪里,在设计什么算法什么数据结构才可能导致他理解出了这类偏差)

a 没有被手动排序过,a 排在 c 的前面,b 被手动排序过,b 也在 c 的前面,但是 a 和 b 却无法确定谁在前面

之前一直以为是抽象的,实际上居然是用数值... 那我应该又找到新的突破点了...

之前我一直怀疑是不是他修改那类算法的时候出了问题,现在想想也可能是调试的时候发现了这个『漏洞』

是不是也有可能是把“不可排序”的文章映射到数值的时候导致的问题?
如果后端存储是支持查询排序的 ORM,是不是可以说就是上面这种情况?

我猜的第一种情况是对于任意两项

import java.util.function.*;

class OrderLT<T> implements Comparator<T> {
private enum Ord { LT, EQ, GT; }
private final Predicate<T> lessThanP;
public OrderLT(Predicate<Pair<? super T, ? super T>> ltP) {lessThanP = ltP;}

@Override int compare(T a, T b) {
if (lessThanP.test(Pair.of(a, b))) return LT.toInt();
return (a.equals(b)? EQ : GT).toInt();
}

@Override boolean equals(Object cmpQ) {return cmpQ instanceof OrderLT && cmpQ.lessThan}
}

上面这个是 Ord 的实现,但是我不该强行用 Predicate... 有点过分了...
我想想可能是什么问题...

我之前想到的第一个是为每个文章建立一个『是否被手动排序过?』布耳值,对于表中每(要比较的)两项,如果任何一项被标记为手动排序过则直接返回预期的顺序(默认按照 lessThan 排序,输出升序列 Ascending sequence,这种情况直接返回 -1 (LT)表示顺序已经满足)不过,虽然理论上会导致这种问题(这是肯定的,原因我待会的文章会说)但是实践上(假设是冒泡排序的交换,快速排序就不能肯定了)只会导致手动排序部分以及边上的两个被“锁死”不可能移动位置而已,没有 5,4 『找不到』谁在前的问题(显然 5 旁边锁死了排序算法就不会工作,因为两项的顺序满足了目标序列,如果本来就是正确的则自动部分排序结果正确,否则自动排序部分是非有序列的,但对此算法是正常情况)。

当然排序算法按操作分选择、插入、交换三类,序的理论却是唯一的,就一个 lessThan 和一个反对称性、传递性最重要(如果不是 lessThan 显然就是 equals 或者 greaterThan 了,不过实际上实现这一个 predicate,判定[1])

5 没有被手动排序过,5 排在 1 前面,4 被手动排序过,4 也在 1 前面,但 5 和 4 却无法得出谁在谁前

Given
list <= {5,4,1} (>)
Where
5 自动排序
5 在 1 前面
4 在 1 前面
In
5 和 4 无法得出谁在谁前

其中有一个容易误会的点是对于集合 {5,4,1} (>) 序是指算法输出

forall i in lastIndex(list). list[i] > list[i+1]

(当然这里我不指定 i in... 或者随便指定 i in indices(list) 也没错... 数学嘛,请滑稽处理,跑)

而不是『某简单排序算法看到 5 > 4 为真,则交换成 4,5, 它是“确保”条件成立并且应用偏序传递性而不是“否认”比较操作符』

... 首先根据 5 和 4 无法得出谁在谁前... 认为是在设计排序算法的过程中出的问题吧
因为 drakeet 是一个非函数式也不太学算法的(真正意义上的纯)工程师,假设他使用了把“文章”直接映射到某标量的方式,我觉得比较有可能(而不是比如设置一个 lessThan 关系集合,然后 comparator 判断某项是否在集合内并且打破偏序)

.... 这种算法到底是哪样的呢?假设它是类似冒泡排序的交换排序

bubbleSort (>) [5,4,1]

它要比较两次:

5>4
= true
4>1 = true

可显然这不是问题,那就假设我之前的猜测是对的,输入是一个二元组

bubbleSort cmp [(4, True), (1, True), (5, False)]
where cmp (x, p) (r, q) = if p and q then (fst x) > (fst r) else True)

我假设他所说这个『无法得出』是无法得出“正确”的结果的意思,那这个程序的输出是(product 箭头拆掉元组部分) [4, 1, 5]
5 和 4 的确是无法得出谁在谁前,因为 snd (5, False)False,不允许交换的

那只好再审题...

5 没有被手动排序过
我考虑一个列表 [5]
5 排在 1 前面
[5, 1] 证明这个列表是 (>) 降序(Descending)的
可是,开始我直觉上(思路上还是有的)没有考虑到这是一种“部分序列”
4 被手动排序过
4 也在 1 前面
用户选择把 4 放在了一个地方,这个地方符合约束: (> 1)
其实情景是『在自动排序序列中插入一项』?
现在列表看起来有一个不定位置的 4,它必须满足 (4 > 1)

5 和 4 却无法得出谁在谁前
首先:听起来这不像是在写代码,因为 5 和 4 的确可以“比较”吧
除非 4 是用户给出“在 1 前面”的那一个,用户没有告诉我们它是否 (>5) 这样就有两种可能的结果:

[5,4,1] when (4<5)
[4,5,1] when (4>5)

这怎么得出呢?显然这类算法没有简单到一定程度

但以上讨论显然好像是忽略了某些本来存在的信息... 总之,想猜出是“为什么错”的还真是非常困难,因为解决方案和理论错误的都可能是由很奇妙的因素导致的... 可能性有无数种,无数种错误都可能在某个侧面被描述为
5 没有被手动排序过,5 排在 1 前面,4 被手动排序过,4 也在 1 前面,但 5 和 4 却无法得出谁在谁前
... 看起来是我还不熟悉实际工程?

现在把 5 4 1 泛化成 a b c,升序排列,然后考虑一下实际上如果我们实现某种算法的话会不会出茬子

b, c 是自动排序的项目 且 b < c
[b, c]
现在用户加入了一项 a 且要求 a < c
『要求』怎么抽象?其实可以做一个 lessThanC 集合,如果右项目是 c,则直接判断左项目是否在 lessThanC 布耳映射内否则返回 True(满足序列)
但是就出现了一个问题:
用户只是说 a < c,我们却不知道 a 和 b 什么关系... 看起来好像是必须要实现全函数 ord 的,这问题当然不可解

但依此得出『无法按要求排序列表』,这其实是一个误区... 因为给定的偏序关系本来就已经满足,a 和 b 是什么关系你随便指定,a>b, a<b 都可以。只要 a < c
Given (b < c, a < c)
我们能不能解 a < b?当然不可以,因为显然不能无中生有,如果 a < c、b < a 是能得出 b < c 的(偏序操作符 < 有传递性可推出 b < a < c),但是上面那货只是指定了一个 a 的取值区间,没有具体到拿 b 去限制它,a b 都只是各自 <c 而已

{a b} < c 

...我决定停下,我还有很多有意义的事情可以做,我真的不知道 drakeet 是在写代码的时候(我觉得不太可能,因为这个理论想弄个算法出来想靠模板化代码.... 另外开始就写代码反而不可能想到这个问题,而且以 drakeet 之前的见识这种问题可能要先想,不过我是受教了...)想到的还是在开始想理论的时候弄错的,但不管怎么样、不管为什么错,知道它是错的就好了...

那我等一会就写文吧,不要追想是为啥错的,也怪浪费时间的。(虽然我觉得是想理论模拟比较算法的时候就出了问题,他的思路还的确蛮跳跃的,我都没有把偏序关系抽象成这个样子只是觉得可以『部分排序』和『固定位置』两种,或许是他开始打算使用 Collections API 的 sort 函数吧,那要实现一个 java.util.Comparator<T>


[1] 之所以不称谓词(predicate)是因为我的确很困惑为啥要这么翻译
我开始把它和量词(qunatifier)弄混了,还好很快就明白自己搞错了
这个翻译成谓词(the part of a sentence or clause containing a verb and stating something about the subject)感觉有点不准确(但是谓语『我爱你』的这个的确是谓词),这里我不会用,不过别的地方以后我还是照用不误
#zhihu https://www.zhihu.com/question/28698429