问题标签 [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 投票
1 回答
1638 浏览

c++ - 类模板特化偏序和函数综合

选择哪个类模板特化是首选的规则包括将特化重写为函数模板,并通过函数模板的排序规则 [temp.class.order] 确定哪个函数模板更特化。考虑这个例子,然后:

gcc 和 clang 都2在这里打印。这对于前面的一些示例是有意义的 - 对非推导上下文 (void反对void_t<T>) 的推导只是被忽略了,因此在两个论点中对推导<T, void_t<T>>成功<X*, void><T*, void>对推导<Y, void_t<Y>>失败。美好的。

现在考虑这个概括:

clang 和 gcc 都将这种专业化报告为模棱两可,介于1和之间2。但为什么?合成的函数模板没有歧义。这两种情况有什么区别?

0 投票
2 回答
61 浏览

c++ - C++模板说明

有人可以向我解释一下关于 C++ 模板中“部分排序”的以下几行——“如果与 X 指定的参数列表匹配的每个参数列表也与 Y 指定的参数列表匹配,则模板 X 比模板 Y 更专业,但反之则不然。”

我无法理解这句话的意思。

0 投票
1 回答
964 浏览

algorithm - 测试给定的 DAG 是否为格

我得到一个具有唯一源和汇的有向无环图(DAG)。有没有一种有效的方法来测试这个图表示的偏序是否是一个格子

换句话说,我需要测试任何两个顶点是否具有唯一的最小上界和最大下界。

0 投票
0 回答
65 浏览

algorithm - 嵌套嵌套集的算法

我有大量集合,其中一些是彼此的子集,例如:

我想获取这个集合并输出子集关系的偏序 DAG

除了比较集合的所有组合(当有大量集合时这是禁止的)之外,有没有办法做到这一点。这似乎接近于一些设置封面问题,但是,我找不到可以减少的问题。

一种优化是创建一个倒排索引,这将有助于避免比较没有像{2, 6}and这样的公共元素的集合{1, 5}

这个问题似乎与偏序的拓扑排序线性扩展有关

这几乎是Generate a DAG from a poset using stricly functional programming的复制品,但我对非纯功能性的解决方案持开放态度。

0 投票
0 回答
92 浏览

swift - 标准库中是否有一种稳定的排序方式可以处理部分订单?

我有要以伪拓扑方式排序的任务列表。说,我有这样的事情:

我要求a在任何任务之前执行所有b任务,并且在所有b任务之前执行所有c任务。此外,同一时间的所有任务都需要保持与输入中相同的顺序。

用计算机科学术语来说,我需要的是

  • 稳定的排序算法和
  • 一种为其提供部分订单的方法。

Swift 标准库中有这样的东西吗?

观察:

  • Comparable,一种用于排序的自然协议,要求顺序是总的。
  • sorted可以使用部分订单,但不稳定。

作为替代方案,拓扑排序算法也可以工作,即使它会做的比我需要的更多。

0 投票
1 回答
76 浏览

algorithm - 在偏序集中查找大于给定的元素

我有一组S类型的元素T<=type 的元素有一个偏序T。众所周知,其中的所有元素S都不是有序的。然后,我需要一种方法来执行以下查询:拥有type元素,找到这样的eTe'Se <= e'.

是否有允许有效执行此类查询的数据结构(无需线性扫描S)?

重要提示:T是完整的格子。

0 投票
0 回答
58 浏览

scala - 根据偏序在集合中的最小选择

不幸的是,我被迫发布尽可能少的代码片段,所以我会尽力清楚地解释问题,提前为冗长道歉。

问题陈述(设计):

我有一个抽象类 Predicate,它由两个子类 NumericPredicate 和 CategoricalPredicate 实现,它们配备了“谓词类型”和“比较值”:

NumericPredicate -> 类型为“<=”或“>”,比较值是 double 类型(但任何可比较的对象都可以) CategoricalPredicate -> 类型为“is-in”或“is-not-in”,并且比较值是一组字符串(但任何配备相等的无序类型都可以在这里工作)

此谓词构成规则的头部(谓词类型的有序序列),如果所有谓词都成立,则匹配。

在这种情况下,谓词可以是“冗余的”(例如,“value <= 2”比“value <= 3”更具体,因此可以安全地删除后者)并且可以删除以提高规则的可读性(其次也有性能提升,但这不是这里的重点)。

目标:

我现在正在为此类规则头实施“减少”阶段,并且正在寻找一种干净的方法来实现这一目标。在实践中,给定集合元素的部分排序(部分是因为无法比较不同种类的谓词),我的减少在于原始集合的谓词中的最小值(每个谓词类型一个)。

我的实际解决方案:

我为 Predicate 类配备了特征 Comparable(“with Comparable[Predicate]”),因此方法“compareTo”在 NumericPredicate 和 CategoricalPredicate 中实现:

接下来是 NumericPredicate 类的方法的实现:

现在,我想要的是通过将不同的谓词组织成可比较的子集合来实现,这些子集合是独立处理的,如下所示:

问题:

  1. 有没有更惯用的方式来在 Scala 中实现部分排序(并且能够在无与伦比的种类中保持所有最小值)?编辑:我知道我正在尝试将部分排序“破解”为总排序(因为它应该是 Comparable),但我看不到如何通过更合适的特征 PartialOrdering 实现我想要的

  2. 假设我的设计选择没问题,当比较两个无法比较的对象时,返回 0 或抛出异常会更好吗?(我的印象是我在默默地压制一个错误,因为在这种情况下,比较两个无法比较的元素是错误的和毫无意义的)

0 投票
1 回答
2754 浏览

wordpress - WooCommerce REST API:更新订单行项目元数据以进行发货

我偶然发现了一个使用 node.js 通过 WooCommerce REST API 更新订单行项目元数据的问题。

我一直在按照这些步骤更新订单(并且在某些领域取得了成功): https ://woocommerce.github.io/woocommerce-rest-api-docs/#update-an-order

现在,我想要实现的是更改订单的已发货行项目数。我通常会在 wordpress UI 中使用部分订单 WC 插件。

下面,您可以找到我使用订单 API 调用从 WC 获得的订单项的屏幕截图。meta_data 数组的最后一个元素有键“shipped”,它包含一个带有一个对象的数组,说明一个(两个订购的物品中的一个)已经发货:

如您所见,键 'shipped' 的值是一个对象。当我将它(返回)发送到 WC 时,我收到一条错误消息: "data":{"status":400,"params":{"line_items":"line_items[0][meta_data][3][value] is not of type string."}}}

当我尝试将值作为字符串发送时,即 lineItems[0].meta_data = [{key:"shipped", value: "[{qty:'2'}]" }]

我没有收到任何错误,但是 WC 将其视为字符串,而不是对象,并且不会按照我的意图更新数据库中的装运数量(它只会将装运数量降至 0):

任何见解或想法 - 我如何通过 WC API 修改订单项的发货数量?

0 投票
1 回答
701 浏览

c++ - 为什么接受数组的 C++ 模板不比接受 GCC 5.3 和 Clang 4.0 的指针更专业?

为什么接下来的两个模板声明模棱两可(所以没有一个比另一个更专业)?我知道这个问题已经在 Stack Overflow 上提出过很多次,但通常人们会回答如何解决歧义,而不是为什么会发生这种情况。

我。 template <class T> void func(char* buf, T size) {}

二、 template <std::size_t N> void func(char (&buf)[N], std::size_t size) {}

尝试通过 C++14 标准的步骤来解决部分函数模板排序 (14.5.6.2):

为了生成转换后的模板,对于每个类型、非类型或模板模板参数(包括其模板参数包 (14.5.3)),分别合成唯一的类型、值或类模板,并将其替换为该参数的每次出现在模板的函数类型中。

转换函数 I 模板的函数类型是:void func(char*, U1),其中U1是一些独特的合成类型。

转换后的函数 II 模板的函数类型是:void func(char (&buf)[N1], std::size_t),其中N1是一些独特的合成值。

使用转换后的函数模板的函数类型,对另一个模板执行类型推导,如 14.8.2.4 中所述。

因此,让我们尝试在一侧(使用第一个模板作为参数,第二个模板作为参数模板)和另一侧执行类型推导。

情况1。

参数模板:template <std::size_t N> void func(char (&buf)[N], std::size_t size). 转换后的参数模板:void func(char*, U1).

试图推断模板参数。" char (&buf)[N]" 不能从 " char*" 类型推导出来。U1 也不匹配std::size_t类型。失败的。

案例 2。

参数模板:template <class T> void func(char* buf, T size). 转换后的参数模板:void func(char (&buf)[N1], std::size_t).

试图推断模板参数。参数模板的第一个参数根本不是类型,它与char[]. T应推导出来std::size_t

所以模板二应该更专业,应该在下面的代码中选择:

为什么 GCC 5.3 和 Clang 4.0 不是这样?

0 投票
1 回答
203 浏览

c++ - 为什么 C++ 模板接受数组并不比一个接受指针 (bis) 更专业?

关于这个问题,它确实具有相同的标题,但我在标准中找到了答案。我继续挖掘这个主题,最后找到了一个不适用这个答案的示例代码。

让我们考虑这段代码:

根据[temp.func.order][temp.deduct.partial]中的偏序规则,如果通过执行这段代码来解释此规则,则模板 II将比模板 I更专业:

所以按照这个解释,模板二应该更专业。为什么不是这样?