当前位置: 首页 > 知识库问答 >
问题:

字符串分组

堵睿范
2023-03-14

我有一个字符串列表的可能组列表。每个字符串由几个单词组成,这些单词是字符串元素。我想根据这些元素对字符串进行分组。

每个组都基于一个公共单词:组中的所有字符串都必须包含该单词——尽管我不要求所有包含该单词的字符串都在同一组中。包含N个单词的字符串可以属于N个不同的组中的任何一个。每个字符串只能在一个组中。每个组必须至少有两个字符串。

目标:形成组以最大化组中字符串的数量(最小化“孤立”字符串)。

例如,如果我有以下字符串列表:

cycle cost
pump cost
cycle analysis
cost example

我将每个字符串中所有可能的单词作为潜在的组。我现在想把这些字符串分组,这样所有的,或者尽可能多的,就可以组成一个组。

我尝试了一种天真的方法,首先采用字符串最多的组,在这个示例中,它将是cost,但这使得循环分析without a group。

我在这个例子中寻找的结果是:

cycle: cycle cost, cycle analysis
cost: pump cost, cost example

是否存在针对此类问题的算法?任何关于要采取的方法的指示都会有所帮助。

共有1个答案

公西俊能
2023-03-14

看起来@m69领先不错。你的问题有几处修改:

    < li >取出尺寸为1的所有套件; < li >当一个集合被(暂时)添加到解决方案中时,该集合的所有元素必须从所有剩余集合中删除 < ul > <李>...任何少于两个元素的集合都会被删除。

不幸的是,这充其量是NP-hard。如果应用程序的输入不是大得离谱,我会使用带有自由回溯的强力试探法。

初始化:

    < li >可行集合是指至少包含两个元素的集合。 < li >处理您的列表。 < ul > < li >将所有可行集合放入列表s。 < li >将所有元素放入宇宙u中。

过程:

    < li >从S中选择一个集合P;将其添加到解决方案列表中。 < li >从s中的每个剩余集合中删除P的所有元素。 < li >从中删除所有不可用的器械包。 < li >如果S为空 < ul > < li >那么如果U的所有元素都存在于S中, < ul > < li >然后停止并报告解决方案。 < li >否则返回上一个呼叫级别
  • 然后返回到上一个调用级别。
  • 否则,请返回步骤 1,然后从 S 中选择下一组

您可以通过明智地对 S 中的集合进行排序来获得一些优势。我推荐一个贪婪的算法,其值根据其元素在S集中的可取性来测量。例如,仅出现在一个集合中的元素会将该集合推到列表的顶部。

这能让你开始吗?

 类似资料:
  • 问题内容: 我正在尝试找到一种将String拆分为String数组的方法,并且每当遇到白色香料时就需要对其进行拆分,例如 “嗨,我是保罗” 进入” “嗨”“我”“保罗” 如何使用RegularExpression在split()方法中表示空格? 问题答案: 您需要一个正则表达式,例如,这意味着: 每当遇到至少一个空格时就进行拆分 。完整的Java代码是:

  • 我有一个逗号分层的字符串,当调用时,它返回大约60的数组大小。在特定的用例中,我只需要从数组中返回第二个值的值。例如,

  • 如何将过滤器列表拆分为单个过滤器元件?split2String在线程“main”java.util.regex中导致:异常。PatternSyntaxException:索引10或(|和)附近的未闭合组(

  • 问题 你想拆分一个字符串。 解决方案 使用 JavaScript 字符串的 split() 方法: "foo bar baz".split " " # => [ 'foo', 'bar', 'baz' ] 讨论 String 的这个 split() 方法是标准的 JavaScript 方法。可以用来基于任何分隔符——包括正则表达式来拆分字符串。这个方法还可以接受第二个参数,用于指定返回的子字符串数

  • 问题内容: 我需要将一个String拆分为单个字符String的数组。 例如,拆分“ cat”将得到数组“ c”,“ a”,“ t” 问题答案: 这将产生

  • 我是 Perl 的新手,但根据我阅读的文档,看起来 Perl 中的 split 函数要求正则表达式模式而不是字符串分隔符作为第一个参数,但我发现使用 之类的东西仍然可以正确拆分字符串。 基于此,我尝试使用可变分隔符(例如。< code>print (split($var,$ string))[0] where < code > $ var = ' ' )并发现它不起作用。我做错了什么? 谢谢! 编