问题标签 [partial-ordering]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1199 浏览

c++ - 什么时候一个模板比另一个模板更专业?'And'/'Or' 与逻辑混淆。

在 C++11 草案的 14.8.2.4p10 中,有这样写

如果对于每个被考虑的类型,一个给定的模板至少对所有类型都是专门化的,并且对某些类型集更专门化,而另一个模板对任何类型都没有更专门化,或者至少对任何类型都没有专门化,那么给定模板比其他模板更专业。

为什么有一个“或至少不像任何类型那样专门化”?据我所知,如果我们有一个类型列表

如果所有 T 至少都一样专业化,而有些则更专业化。并且没有一个 U 比 U 更特化,那么在我看来,从逻辑上讲,T 的集合作为一个整体比 U 的集合更特化。当我们没有一个至少比相应的 T 专业化时,为什么会有提到的后备?

0 投票
3 回答
117 浏览

scala - 实现特征 PartialOrdered[T]

作为练习,我应该实现一个特征 PartialOrdered[T]。

扩展此特征的类 K 应该在下面实现,使得

但是,编译会出现以下错误:

那么我错过了什么?提前致谢

编辑:这是一个示例类 Rectangle(在坐标系中),给出了两个相对的角,如果完全包含一个矩形,则它在另一个下方

0 投票
1 回答
4500 浏览

c++ - 模板推导中的偏序过程是什么

阅读 C++11 标准我无法完全理解以下语句的含义。例子非常受欢迎。

两组类型用于确定偏序。对于涉及的每个模板,都有原始函数类型和转换后的函数类型。[注意:转换类型的创建在 14.5.6.2 中描述。— 尾注] 推演过程使用转换后的类型作为参数模板,将另一个模板的原始类型作为参数模板。对于偏序比较中涉及的每种类型,此过程执行两次:一次使用转换后的模板 1 作为参数模板,模板 2 作为参数模板,再次使用转换后的模板 2 作为参数模板和模板 1作为参数模板
——N3242 14.8.2.4.2

0 投票
1 回答
2370 浏览

c++ - PartialOrdering、StrictWeakOrdering、TotalOrdering,应用的主要区别是什么

【SGI官方文档】

由于非自反性和传递性,operator< 总是满足偏序的定义。严格弱序的定义更加严格,全序的定义更加严格。

而且我还阅读了文档中严格弱排序的定义:StrictWeakOrdering

前三个公理,非自反性、反对称性和传递性,是偏序的定义;等价的传递性是严格弱排序的定义所要求的。全序是满足更严格条件的排序:等价必须与等价相同。

我不太确定这些定义。一些主要问题:

1.偏序是否隐含地定义了等价?

2.严格弱排序全排序呢?

3.STL在排序算法中要求严格的弱排序,为什么不是偏序或全序? 对于这个问题,我已经阅读了一些教科书,这些教科书通过证明规则满足三个公理来证明有效的比较规则:非自反性、反对称性、传递性,这是偏序的定义,并且文档中提到 operator< 总是满足这个定义,所以为什么我们不能只使用偏序比较对象,或者等效地,使用运算符

0 投票
1 回答
226 浏览

z3 - 如何生成部分订单的模型?

我正在尝试使用 Z3 为一组描述偏序理论的 SAT 断言生成模型。我尝试了 Z3 指南中的子类型示例,但似乎无法获得具体模型。有没有一种方法可以让 Z3 生成一个模型来描述元素之间的顺序并满足我所做的所有断言?

例如,以下是“子类型”的约束。Z3 是否有可能产生类似“int-type *<* real-type *<* complex-type *<* obj-type *<* root-type”和“string-type *<* obj-type”的模型*<* root-type”(如果我使用“*<*”来表示子类型关系)?

目前,我得到了

预先感谢您提供的任何帮助。

0 投票
3 回答
667 浏览

algorithm - 合并两个部分(共同超定)的排序信息集

我有一个在网格中包含数据的网络应用程序。用户可以对列重新排序,服务器可以更改存在的列。我想将用户的列顺序保存在 cookie 中并在页面加载时恢复它。

更正式地说,我有两个唯一 ID(字符串)数组,称为user_columnsserver_columns。我想重新订购server_columns,以便我尊重来自 的所有订购信息user_columns,并尽可能多地来自server_columns。我该怎么做呢?“尽可能”的合理正式定义是什么?

到目前为止我的分析:

问题的一个方面是微不足道的:如果服务器删除了一些列,则从user_columns. 有关不再存在的列排序的任何信息都没有实际意义。那么问题就变成了合并两个可能相互冲突的订购信息集之一。

这对应于投票理论中的一系列问题:给定一组选票,每张选票都包含候选人之间的部分顺序,产生候选人的完整顺序,这在某种意义上反映了选票。

这使我认为,通过将Schulze MethodRanked Pairs应用于基于user_columns和的一组充分操纵的选票,我可能会得到一个可行的解决方案server_columns。出于用户体验的原因,通过在最后(右侧)插入新列来打破联系对我来说似乎是个好主意。

这听起来像是在正确的轨道上吗?

还要注意,我们可以考虑三种比较:A 和 B 都在 中user_columns,其中之一是,或者都不是。前一种和后一种很容易解决(分别参考user_columnsserver_columns);中间的那个,以及它与后者的交互,是棘手的部分。

0 投票
1 回答
249 浏览

algorithm - 如何使用 PartialOrdering 订购收藏品?

我需要订购一组信封。每个信封都用它的高度和宽度来描述。如果信封 1 可以插入信封 2,则信封 1 小于信封 2。如果信封1 无法插入信封2,反之亦然,则无法进行比较。

我如何在 scala 中订购这些信封?我在互联网上找不到任何有关这方面的信息。

这是我的一些代码:

0 投票
2 回答
312 浏览

c++ - 什么时候两个函数模板被认为是部分有序的,什么时候是模棱两可的?

阅读问题如何使这些 std::function 参数明确?,到目前为止,我以为我理解了函数模板的偏序是什么,但是在阅读了那个问题之后,我写下了三个例子来检查编译器的行为,得到的结果让我很难理解。

示例 #1

问题:这两个功能都是可行的,这很明显,但不是T&更专业T吗?相反,编译器会引发模棱两可的调用错误。

示例 #2

问题:如果示例 #1 中的T&andT是不明确的,那么为什么这里没有一个 call 是不明确的?X<int>可构造自X<int&>,也X<int&>可构造自 ,X<int>这要归功于提供的构造函数。是因为编译器生成X<int>::X(X<int> const&)的复制构造函数比,更好的转换序列X<int>::X(X<int&> const&)(如果是这样,是什么让它更好,请注意参数是按值传递的),所以特化的顺序根本不重要?

示例#3

问题:现在这类似于“将 lambda[](int){}std::function<void(int&)>std::function<void(int)>从问题链接中匹配。为什么在这两个调用中都选择了更专业的函数模板?是不是因为转换顺序相同,所以偏序开始很重要?

在 GCC 4.9.0 上完成的所有测试都-std=c++11没有额外的标志。

0 投票
2 回答
6819 浏览

sorting - 为什么 Rust 不通过 f64 和 f32 的 Ord 特征实现全排序?

虽然 Rust 中的所有整数类型都实现Ord了强调全序,但浮点类型只实现了PartialOrd. 这意味着可能存在无法比较的浮点值。这似乎很难理解,因为浮点数可以被认为是对实数的近似,而实数恰好是一个完全有序的集合。即使加上正无穷和负无穷,也能保持实数集完全有序。为什么在 Rust 中有这个奇怪的选择?

此限制意味着通用排序/搜索算法只能假设对数字进行部分排序。IEEE 754 标准似乎提供了一个总排序谓词

泛型代码中的 NaN 有这么大的问题吗?

0 投票
1 回答
55 浏览

java - 在java中*不*使用值对对象进行排序

我想创建一类对象来相互比较,而不使用值来比较它们。Java中是否有能够为我提供此功能的库?在排序方面,最常提到的库是 Comparator,但到目前为止我看到的所有示例都使用对象中的某些值来执行排序。

例如,我希望能够在一类对象中说:

对象 A 比对象 B 更重要。对象 B 比对象 C 更重要。

因此,我希望图书馆能够进行某种分析,并能够根据这些值对项目进行排序,并对我说,上述值的顺序是 A、B、C,因为命令。

是否有能够在 Java 中执行此操作的库?