- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一种排序算法,它尊重每个元素的最小和最大范围1。问题域是一个推荐引擎,它结合了一组业务规则(限制)和推荐分数(值)。如果我们有想要推广的推荐(例如特殊产品或优惠)或我们希望出现在列表顶部附近的公告(例如“这非常重要,请记住验证您的电子邮件地址以参与即将到来的促销事件!”)或靠近列表底部(例如“如果您喜欢这些推荐,请单击此处了解更多...”),它们将在适当的位置限制下进行策划。例如,这应该始终是最高位置,这些应该在前 10 名或中间 5 名等中。此策划步骤提前完成并在给定时间段内保持固定,并且出于业务原因必须保持非常灵活。
请不要质疑商业目的、UI 或输入验证。我只是想在给定的约束中实现算法。请将此视为学术问题。我将努力提供严格的问题陈述,非常欢迎对问题的所有其他方面提供反馈。
所以如果我们正在排序 char
s,我们的数据将具有以下结构
struct {
char value;
Integer minPosition;
Integer maxPosition;
}
minPosition
和
maxPosition
可能为空(不受限制)。如果在所有位置限制都为空的算法上调用此方法,或所有
minPosition
s 为 0 或更少,并且所有
maxPositions
等于或大于列表的大小,那么输出就是
char
s 升序。
minPosition
,该算法只会对两个元素重新排序和
maxPosition
它们的新位置不会违反这两个元素。基于插入的算法将项目提升到列表的顶部并重新排序其余的项目有明显的问题,因为每次迭代后每个后面的元素都必须重新验证;在我看来,这排除了具有 O(n3) 复杂性的此类算法,但我不会在不考虑相反证据的情况下排除此类算法(如果提出)。
<char>(<minPosition>:<maxPosition>)
的形式,其中
Z(1:1)
表示
Z
必须在列表的前面,
M(-:-)
表示
M
可以在任何最终列表中的位置和自然顺序(仅按值排序)是
A...M...Z
)及其最佳顺序。
Input order
A(1:1) D(-:-) C(-:-) E(-:-) B(-:-)
Optimal order
A B C D E
Input order
E(1:1) D(2:2) C(3:3) B(4:4) A(5:5)
Optimal order
E D C B A
Input order
E(1:1) C(-:-) B(1:5) A(4:4) D(2:3)
Optimal Order
E B D A C
E
被限制为
1:1
,因此它在列表中排在第一位,即使它的值最低。
A
同样受限于
4:4
,所以也是乱序的。
B
与
C
具有基本相同的约束并且可能出现在最终列表中的任何位置,但
B
将在
C
之前因为值(value)。
D
可能在位置 2 或 3,所以它出现在
B
之后由于自然排序但在
C
之前因为它的限制。
A
、
B
、
C
、
D
、
E
)有很大不同,但最终顺序是正确的。如上一段所述,此列表中的任何内容都不能在不违反一个或多个项目的约束的情况下重新排序。
Input order
B(-:-) C(2:2) A(-:-) A(-:-)
Optimal order
A(-:-) C(2:2) A(-:-) B(-:-)
C
保持不动,因为它已经处于唯一有效的位置。
B
被重新排序到最后,因为它的值小于两者
A
的。实际上,会有额外的字段来区分这两个
A
's,但从算法的角度来看,它们是相同的,保留或反转它们的输入顺序是最佳解决方案。
Input order
A(1:1) B(1:1) C(3:4) D(3:4) E(3:4)
Undefined output
A
和
B
都被限制在位置 1 和 2)
C
,
D
, 和
E
被限制在一个只能容纳 2 个元素的范围内。换句话说,范围
1:1
和
3:4
被过度约束。但是,约束的一致性和合法性由 UI 验证强制执行,因此如果它们不正确,则正式不是算法问题,并且在这种情况下,算法可以返回尽力而为的排序或原始排序。可以考虑将这样的输入传递给算法
undefined behavior ;任何事情都可能发生。所以,对于剩下的问题......
.equals()
) 和交换方法中进行额外计算就足够了。
1:n
,你最终会遍历你的 n 个元组列表 n 次。这仍然与问题的范围无关,因为在真正的问题域中,约束被强制执行一次并且不会改变。
最佳答案
关于解决方案的存在:您可以将其视为二部有向图,其中一组顶点 (U) 是 k 值,另一组 (V) 是 k 等级(1 到 k),以及每个顶点的弧在 U 到其在 V 中的有效等级。那么解的存在就相当于最大匹配是一个双射。检查这一点的一种方法是向 U 中的每个顶点添加一个带有弧的源顶点,以及一个带有来自 V 中每个顶点的弧的汇顶点。将每条边的容量分配为 1,然后找到最大流量。如果它是 k 那么有一个解决方案,否则没有。
http://en.wikipedia.org/wiki/Maximum_flow_problem
--edit-- O(k^3) 解决方案:首先排序以找到每个顶点的排序等级(1-k)。接下来,将您的值和等级视为 2 组 k 个顶点,U 和 V,从 U 中的每个顶点到 V 中所有合法等级的加权边。分配每条边的权重是与排序中的顶点的距离订单。例如,如果 U 是 10 到 20,那么 10 的自然等级是 1。从值 10 到等级 1 的边的权重为零,到等级 3 的权重为 2。接下来,假设所有缺失的边都存在并赋予它们无限的权重。最后,在 O(k^3) 中找到“MINIMUM WEIGHT PERFECT MATCHING”。
http://www-math.mit.edu/~goemans/18433S09/matching-notes.pdf
这并没有利用 U 中每个元素的合法等级是连续的这一事实,这可能有助于将运行时间降低到 O(k^2)。
关于algorithm - 是否存在尊重最终位置限制并在 O(n log n) 时间内运行的排序算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28839487/
我有一个 ServiceBusQueue(SBQ),它获取大量消息负载。我有一个具有 accessRights(manage) 的 ServiceBusTrigger(SBT),它不断轮询来自 SBQ
在下面给出的结果集中,有 2 个唯一用户 (id),并且查询中可能会出现更多此类用户: 这是多连接查询: select id, name, col1Code, col2Code, col2Va
我正在用 Python 2.7.3 编写一个带有 GRequests 的小脚本和 lxml 可以让我从各种网站收集一些收藏卡价格并进行比较。问题是其中一个网站限制了请求的数量,如果我超过它,就会发回
我想知道何时实际使用删除级联或删除限制以及更新级联或更新限制。我对使用它们或在我的数据库中应用感到很困惑。 最佳答案 在外键约束上使用级联运算符是一个热门话题。 理论上,如果您知道删除父对象也将自动删
下面是我的输出,我只想显示那些重复的名字。每个名字都是飞行员,数字是飞行员驾驶的飞机类型。我想显示驾驶不止一架飞机的飞行员的姓名。我正在使用 sql*plus PIL_PILOTNAME
我正在评估不同的移动框架,我认为 nativescript 是一个不错的选择。但我不知道开发过程是否存在限制。例如,我对样式有限制(这并不重要),但我想知道将来我是否可以有限制并且不能使用某些 nat
我正在尝试使用 grails 数据绑定(bind)将一些表单参数映射到我的模型中,但我认为在映射嵌入式集合方面可能存在一些限制。 例如,如果我提交一些这样的参数,那么映射工作正常: //this wo
是否可以将 django 自过滤器起的时间限制为 7 天。如果日期超过 7 天,则不应用过滤器 最佳答案 timesince 的源代码位于 django/django/utils/timesince.
我想在我的网站上嵌入一个 PayPal 捐赠按钮。但问题是我住在伊朗——这个国家受到制裁,人们不使用国际银行账户或主要信用卡。 有什么想法吗?请帮忙! 问候 沮丧 最佳答案 您可以在伊朗境内使用为伊朗
这是我的查询 select PhoneNumber as _data,PhoneType as _type from contact_phonenumbers where ContactID = 3
这个问题在这里已经有了答案: What is the maximum number of parameters passed to $in query in MongoDB? (4 个答案) 关闭
我的一个项目的 AndroidManifest.xml 变得越来越大(> 1000 行),因为我必须对某些文件类型使用react并且涵盖所有情况变得越来越复杂。我想知道 list 大小是否有任何限制。
在使用 Sybase、Infomix、DB2 等其他数据库产品多年后使用 MySQL 5.1 Enterprise 时;我遇到了 MySQL 不会做的事情。例如,它只能为 SELECT 查询生成 EX
这个问题在这里已经有了答案: What is the maximum number of parameters passed to $in query in MongoDB? (4 个回答) 关闭5年
通常我们是在{$apache}/conf/httpd.conf中设置Apache的参数,然而我们并没有发现可以设置日志文件大小的配置指令,通过参考http://httpd.apache.org/do
我正在搜索最大的 Android SharedPreferences 键值对,但找不到任何好的答案。其次,我想问一下,如果我有一个键,它的字符串值限制是多少。多少字符可以放入其中。如果我需要频繁更改值
我目前正在试验 SoundCloud API,并注意到我对/tracks 资源的 GET 请求一次从不返回超过 200 个结果。关于这个的几个问题: 这个限制是故意的吗? 有没有办法增加这个限制? 如
我正在与一家名为 Dwolla 的金融技术公司合作,该公司提供了一个 API,用于将银行信息附加到用户并收取/发送 ACH 付款。 他们需要我将我的 TLS 最低版本升级到 1.2(禁用 TLS 1.
我在 PHP 中有一个多维数组,如下所示: $array = Array ( [0] => Array ( [bill] => 1 ) [1] => Array ( [
我在获取下一个查询的第一行时遇到了问题: Select mar.Title MarketTitle, ololo.NUMBER, ololo.Title from Markets mar JOIN(
我是一名优秀的程序员,十分优秀!