假设我有一个包含6个球(3个白色和3个黑色)的包.我想找到给定长度的所有可能子集,忽略顺序.在上面的例子中,我只能从包中抽出3个球组合:
我已经用我选择的语言找到了一个完全符合这个标准的库,但我觉得它对于更多的数字来说很慢.例如,对于包含15个白色,1个黑色,1个蓝色,1个红色,1个黄色和1个绿色的袋子,仅有32个10个球的组合,但产生结果需要30秒.
有没有一种有效的算法可以找到我自己可以实现的所有组合?也许这个问题并不像我最初想的那样微不足道......
注意:我甚至不确定用正确的技术词来表达这一点,所以请随意纠正我的帖子的标题.
我正在尝试使用常规HTML和特殊Unicode字符(例如"ÖÄÅöäå"(瑞典语))打开文件,对其进行格式化,然后将其输出到文件中.
到目前为止一切都很好,我可以打开文件,找到我需要的部分并输出到文件中.
但重点是:
我无法将输入的Unicode数据保存到文件中而不会丢失我的编码(例如,'ö'变成'Ã'').
虽然我可以通过手动将它们输入到代码本身,但仍然可以执行正则表达式并将它们输出到正确的编码.但不是在我导入文件,格式化然后输出时.
使用OCT时的工作方法示例(例如,这可以输出到没有编码问题的文件):
my $charsSWE = "öäåÅÄÖ";
# \344 = ä
# \345 = å
# \305 = Å
# \304 = Ä
# \326 = Ö
# \366 = ö
my $SwedishLetters = '\344 \345 \305 \304 \326 \366';
if($charsSWE =~ /([$SwedishLetters]+)/){
print "Output: $1\n";
}
Run Code Online (Sandbox Code Playgroud)
下面的方法不起作用,因为编码丢失(这是代码部分的快速说明,但其概念是相同的[例如,打开文件,获取和输出]):
open(FH, 'swedish.htm') or die("File could not be opened");
while(<FH>)
{
my @List = /([$SwedishLetters]+)/g;
message($List[0]) if @List;
}
close(FH);
Run Code Online (Sandbox Code Playgroud) 这是我的代码..
while (1) {
do_stuff;
do_some_checks;
do { warn error 1; last } if not OK;
do_more_stuff;
do_some_checks;
do { warn error 2; last } if not OK;
do_even_more_stuff;
do_some_checks;
do { warn error 3; last } if not OK;
...
#finally
last;
}
Run Code Online (Sandbox Code Playgroud)
我比它更喜欢它:
do_stuff;
do_some_checks;
if (!OK) {
warn error 1;
} else {
do_more_stuff;
do_some_checks;
if (!OK) {
warn error 2;
} else {
do_even_more_stuff;
do_some_checks;
if (!OK) {
...
}
# finally
success!
}
}
Run Code Online (Sandbox Code Playgroud)
每次都会遇到我唯一的事情,虽然使用这个结构有时我忘记添加最终结果 …