问题标签 [greedy]

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 投票
5 回答
426 浏览

regex - 另一个贪婪的 sed 问题

我正在使用 html 框架源自动下载许多图像。太棒了,Sed,wget。帧源示例:

所以我这样做:

得到看起来像这样的部分:

然后这样做:

wget --base=/some/url/concept_Core.jpg

但是有一条讨厌的线。那条线,很明显,是网站中的一个错误,或者任何可能的错误,但它是错误的,但是我无法更改它。;)

即,将其中的两个“ concept_Frgate16.jpg ”排成一行。我的剧本给了我

你明白为什么。Sed 是贪婪的,这显然出现在这种情况下。

现在的问题是,我该如何摆脱这种极端情况?也就是说,让它不贪婪,让它停在第一个.jpg 上?强调文本

0 投票
4 回答
1156 浏览

algorithm - 使用动态规划或贪心方法解决问题?

问题应该具有哪些属性,以便我可以决定使用动态编程或贪婪方法的方法?

0 投票
1 回答
1057 浏览

regex - IIS 使 URL Rewrite 变得贪婪

我想在 IIS 7.5(在 Windows Web Server 2008 R2 上)中创建一个通用的 URL 重写规则。

我想匹配以下网址:

www.mysite.com/param
www.mysite.com/folder1/
www.mysite.com/folder1/param
www.mysite.com/folder1/folder2/
www.mysite.com/folder1/folder2/param

当我想匹配一个文件夹时,请注意尾部的斜杠 (/),否则它是一个参数。

我已经设置了以下重写规则:

它具有三个匹配子句:{R:1}、{R:2} 和 {R:3}。但是,当我输入以下测试 URL 时:

文件夹 1/参数

我得到以下回复:

{R:1} 为空
{R:2} = 文件夹
1 {R:3} = 参数

我怀疑以下反应:

{R:1} = 文件夹 1
{R:2} 为空
{R:3} = 参数

即我希望将folder1映射到重写模式的第一部分。

我想将重写规则映射到:

我缺少什么让匹配变得贪婪,即匹配第一个可能的子句?

0 投票
2 回答
4860 浏览

java - 图着色算法(贪心着色)

我正在使用 Java 进行图形着色项目。我需要使用四色定理实现四种不同的图形着色算法。我对名为少数邻居贪婪算法的算法之一有疑问。

我有一张地图,其中包含一堆多边形对象(存储在数组列表中)。另外,我有一个 2D 布尔数组,它表示不同多边形的邻接关系。

我从理论上知道该算法:我有一个优先级队列来存储我的未着色多边形。基于邻接计数的队列顺序。如果一个多边形的邻居很少,它被认为比一个有很多邻居的多边形好。无论如何,该算法应该重复从优先队列中绘制一个多边形,并尝试根据它的邻接对其进行着色。

不幸的是,我在实施部分遇到了问题。我根据邻接计数获得了优先队列,但是在为这些多边形分配颜色时遇到了问题。如果有人研究过这种算法,或者有想法的人,请与我分享。我需要一些想法来加快实施部分。

提前致谢。

0 投票
2 回答
191 浏览

java - 如何访问文本块作为使用 ANTLR 中的 greedy=false 选项匹配的属性?

我的 ANTLR 语法中有这样的规则:

此规则仅匹配 c 样式的注释,因此它可以接受任何一对 /* 和 */ 以及介于两者之间的任意文本,并且它工作正常。

我现在要做的是在规则匹配时捕获 /* 和 */ 之间的所有文本,以使其可供操作访问。像这样的东西:

这种方法不起作用,在解析过程中它在到达“/ *”之后的第一个字符时给出“没有可行的选择”

我不太清楚是否/如何做到这一点 - 欢迎任何建议或指导,谢谢。

0 投票
5 回答
671 浏览

regex - sed 中的贪婪

我想

成为

为了实现这一点,我做到了

但是,这个正则表达式改变了

进入

代替

有人可以帮我建立一个改变的正则表达式

进入

0 投票
1 回答
947 浏览

java - java regex:匹配以非数字或空字符串开头的输入,后跟特定模式

我正在使用 Java 正则表达式来匹配和捕获字符串,例如:

0::10000

一个解决方案是:

(0::\d{1,8})

但是,输入的匹配会成功

10::10000

同样,这是错误的。因此,我现在有:

[^\d](0::\d{1,8})

这意味着它必须以除数字以外的任何字符开头,但这意味着在第一个零之前需要有一些字符。我真正想要的(以及我需要帮助的)是说“以非数字或根本没有的方式领导”。

总之,最终解决方案正则表达式应匹配以下内容:

0::10000
kjkj0::10000

并且不应与以下内容匹配:

10::10000

如果有人想提供帮助,这个网站可能会有用。

谢谢。

0 投票
1 回答
499 浏览

regex - Perl正则表达式中的加权析取?

我对正则表达式相当有经验,但是在当前涉及析取的应用程序中遇到了一些困难。

我的情况是这样的:我需要根据地址的“标识符元素”上的正则表达式匹配将地址分成其组成部分——类似的英文示例是“state”、“road”或“林荫大道”--例如,如果我们在地址中写下了这些。想象一下,我们有一个像下面这样的地址,其中(这在英语中永远不会发生),我们在每个名称之后指定了标识符类型

United States COUNTRY California STATE San Francisco CITY Mission STREET 345 NUMBER

(大写字母中的词是我所说的“标识符”)。

我们想把它解析成:
United States COUNTRY
California STATE
San Francisco CITY
Mission STREET
245 NUMBER

好的,这当然是为英语设计的,但有一个问题:我正在处理中文数据,实际上这种标识符规范一直在发生。下面的一个例子:

云南-省 ; 丽江-市 ; 古城-区 ; 西安-街 ; 杨春-巷 ; Yunnan-Province ; LiJiang-City ; GuCheng-District ; Xi'An-Street ; Yangchun-Alley

这很容易——对潜在的候选标识符名称进行惰性匹配,分成一个分离列表。

对于中国,以下是“省级”实体:

省 (Province) , 自治区 (Autonomous Region) , 市 (Municipality)

所以到目前为止我的正则表达式看起来像这样:

(.+?(?:(?:省)|(?:自治区)|(?:市)))

我有一系列这些,以说明地址的不同部分。例如,对应于城市的下一个级别是:

(.+?(?:(?:地区)|(?:自治州)|(?:市)|(?:盟)))

所以要匹配一个省实体,然后是一个城市实体:

(.+?(?:(?:省)|(?:自治区)|(?:市)))(.+?(?:(?:地区)|(?:自治州)|(?:市)|(?:盟)))

使用命名的捕获组:
(?<Province>.+?(?:(?:省)|(?:自治区)|(?:市)))(?<City>.+?(?:(?:地区)|(?:自治州)|(?:市)|(?:盟)))

对于上述情况,这会产生:
$+{Province} = 云南省<br> $+{City} = 丽江市

这一切都很好,让我走得很远。然而,问题是当我尝试考虑可能是其他标识符的子字符串的标识符时。例如,一个常见的街道实体是“村委会”,意思是村组委会。在我希望分开的一组地址中,并非每个地址都完整地写出。事实上,我找到了“村委”,也只是简单的“村”。

问题?如果我对这些元素进行纯析取,我们有以下内容:

(?<Street>.+?(?:(?:村委会)|(?:村委)|(?:村)))

然而,如果你有一个实体保定-村委会(保定村组委会),这个懒惰的正则表达式会在村停下来收工,让我们可怜的委员会成为孤儿,因为村是潜在的分离元素之一.

想象一下这样的英语等价物:
(?<Animal>.+?(?:(?:Cat)|(?:Elephant)|(?:CatElephant)|(?:City)))

我们有两个输入字符串:
1.“crap catelephant crap city”,我们想要“Crap catelephant”和“crap city” 2.“crap catelephant city”,我们想要“crap cat”“elephant city”

啊,你说的解决办法就是让前置标识符贪婪捕获。但!有些实体具有相同的标识符但不在同一级别。

以市为例。这意味着简单的“城市”。但在中国,有县级市、省级市和市级市。如果该字符在字符串中出现两次,尤其是在两个相邻实体中,贪心搜索会错误地将贪心匹配标记为第一个实体。如下所示:

广东-省 ; 江门-市 ; 开平-市 ; 三埠-区 石海管-区<br> Guangdong-province ; Jiangmen-City ; Kaiping-City ; Sanbu-District ; Shihaiguan-District

(请注意,如上所述,这是手动分割的。原始数据将仅包含一串连接的字符)

贪婪搜索的匹配是
江门市开平市

这是错误的,因为两个相邻的实体应该被分成它们的组成部分。一个是省级市,一个是县级市。

回到原点,感谢您阅读本文,有没有办法对析取实体进行加权?我希望正则表达式首先找到最高的“加权”标识符。村委会而不是简单的村,例如“catelephant”而不是“cat”。在初步实验中,正则表达式解析器显然从左到右寻找析取匹配。这是一个有效的假设吗?我应该将最常出现的标识符放在分离列表的首位吗?

如果我失去了任何与中国相关的细节,我很抱歉,如果需要可以进一步澄清。这个例子真的不必是中文的——我认为更一般地说,这是一个关于正则表达式分离匹配机制的问题——它优先选择分离实体的顺序,以及它如何决定何时“调用它”一天”在懒惰搜索的背景下?

在某种程度上,在懒惰和贪婪搜索之间是否存在某种中间立场?在最长/最高加权分离实体之前找到你能找到的最小位?懒惰,但如果可以的话,为了彻底而付出一点额外的努力?(顺便问一下,我大学的工作理念?)

0 投票
10 回答
31285 浏览

algorithm - 贪心算法的使用示例?

贪心算法有什么用?一个真实的例子?

0 投票
1 回答
1360 浏览

algorithm - 最大硬币分区

自从昨天站在超市的销售点,再次尝试启发式地找到我的硬币的最佳分区,同时试图忽略我身后不耐烦和紧张的队列,我一直在思考潜在的算法问题:

给定一个价值为 v 1 ,...,v n的硬币系统,有限数量的硬币 a 1 ,...,a n以及我们需要支付的金额 s。我们正在寻找一种算法来计算分区 x 1 ,...,x n (with 0<=x i <=a i ) with x 1 *v 1 +x 2 *v 2 +...+x n *v n >= s 使得总和 x 1 +...+x n - R(r) 最大化,其中 r 是变化,即 r = x 1 *v 1 +x 2 *v 2 +。 ..+xn *v n - s 和 R(r) 是从收银员返回的硬币数量。我们假设收银员拥有无限数量的所有硬币,并且总是返还最少数量的硬币(例如使用 SCHOENING 等人解释的贪婪算法)。我们还需要确保没有换钱,所以最好的解决方案不是简单地给所有的钱(因为在这种情况下解决方案总是最优的)。

感谢您的创意输入!