Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 需要更好的数字组合解决方案吗_Linux_Perl - Fatal编程技术网

Linux 需要更好的数字组合解决方案吗

Linux 需要更好的数字组合解决方案吗,linux,perl,Linux,Perl,我有以下条目的文件: 1,2 2,3 4,5 1,3 1,4 5,6 ... 这告诉ids:第一列与第二列匹配。现在,我想找到所有id组,这些id组只包含所有组合。i、 e.需要输出以下内容: 1,2,3 4,5 1,4 5,6 我试图为解决方案编写一个perl脚本: while(<STDIN>) { if(m/^(\d+),(\d+)/) { $dub{$1}{$2} = 1; $dub{$2}{$1} = 1; $hs{

我有以下条目的文件:

1,2
2,3
4,5
1,3
1,4
5,6
...
这告诉ids:第一列与第二列匹配。现在,我想找到所有id组,这些id组只包含所有组合。i、 e.需要输出以下内容:

1,2,3
4,5
1,4
5,6
我试图为解决方案编写一个perl脚本:

while(<STDIN>) {
    if(m/^(\d+),(\d+)/) {
        $dub{$1}{$2} = 1;
        $dub{$2}{$1} = 1;
        $hs{$1} = 1;
        $hs{$2} = 1;
    }
}

$i=0;
foreach $a (keys %dub) {
    $grp[$i]{$a} = 1;
    foreach $b (keys %{$dub{$a}}) {
        $grp[$i]{$b} = 1;
        foreach $c (keys %hs) {
            if($c == $a || $c == $b) { next; }
            $flag = 1;
            foreach $d (keys %{$grp[$i]}) {
                if(!$dub{$d}{$c}) {
                    $flag = 0;
                    last;
                }
            }
            $grp[$i]{$c} = 1 if($flag);
        }
        $i++;
    }
}

for($i=0; $i<=$#grp; $i++) {
    print join(",", (keys %{$grp[$i]}))."\n";
}
while(){
如果(m/^(\d+),(\d+/){
$dub{$1}{$2}=1;
$dub{$2}{$1}=1;
$hs{$1}=1;
$hs{$2}=1;
}
}
$i=0;
foreach$a(密钥%dub){
$grp[$i]{$a}=1;
foreach$b(键%{$dub{$a}){
$grp[$i]{$b}=1;
foreach$c(键%hs){
如果($c==a | |$c==b){next;}
$flag=1;
foreach$d(键%{$grp[$i]}){
if(!$dub{$d}{$c}){
$flag=0;
最后的
}
}
$grp[$i]{$c}=1如果($flag);
}
$i++;
}
}
对于($i=0;$i这对我很有用:

use Data::Dump;

my @results;
my ($last_a, $last_b) = (0,0);

while(<DATA>) {
    chomp;
    my ($a, $b) = split /,/;
    if( $last_b == $a ) {
        my $last_item = $results[$#results];
        push @$last_item, $b;
    }
    else {
        push @results, [$a, $b];
    }
    ($last_a,  $last_b) = ($a, $b);
}

dd @results; # ([1, 2, 3], [4, 5], [1, 3], [1, 4], [5, 6])

__DATA__
1,2
2,3
4,5
1,3
1,4
5,6
使用数据::转储;
我的@results;
我的($last_a,$last_b)=(0,0);
while(){
咀嚼;
我的($a,$b)=分割/,/;
如果($last_b==$a){
我的$last_项目=$results[$#results];
推送@$最后一项,$b;
}
否则{
推送@results,[$a,$b];
}
($last_a,$last_b)=($a,$b);
}
dd@results;#([1,2,3],[4,5],[1,3],[1,4],[5,6])
__资料__
1,2
2,3
4,5
1,3
1,4
5,6

您没有真正描述我们应该使用的算法。我真的不明白为什么您的输入会生成“1,2,3”和“1,4”,而不仅仅是“1,2,3,4”

但这是你想要的吗

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

my %data;
while (<DATA>) {
  chomp;
  my ($k, $v) = split /,/;
  push @{ $data{$k} }, $v;
}

foreach (sort keys %data) {
  say "$_,", join ',', @{ $data{$_ } };
}

__DATA__
1,2
2,3
4,5
1,3
1,4
5,6
!/usr/bin/perl
严格使用;
使用警告;
使用5.010;
我的%数据;
而(){
咀嚼;
我的($k,$v)=分割/,/;
推送{$data{$k},$v;
}
foreach(排序键%data){
说“$”,连接“,”,@{$data{$};
}
__资料__
1,2
2,3
4,5
1,3
1,4
5,6

根据我的理解,{1,2,3}在同一个组中,因为它们都指向彼此({1,2},{2,3},{1,3}存在).所以,我们可以把这个问题简化为在无向图中寻找派系,这是一个NP完全问题。因此,在大数据上,每个解决方案都会非常低效。

4级循环?我无法想象你为什么需要所有的循环。我不知怎的觉得
someArray[I][j]+;
也会奏效。。。(当然,考虑到您正确计算了大小,或者动态添加了元素)dark:很抱歉发布我的一个愚蠢的解决方案,但这就是我现在拥有的。Fred:我需要任何编程解决方案。Philip:你能给我指一下链接吗?你应该花更多的时间解释你想做什么。@Sandepkumar是的,这也在标题中。但是,你的输出似乎有一些冲突。你有1,2和2,3,1,3生成1,2,3,但1,4不在其中?感谢您的快速回复,但它不适用于以下i/p:1,2 7,8 2,3 4,5 1,3 1,4 5,6@SandeepKumar
i/p
是“输入”的缩写吗?请更新您的问题并放置一组测试用例,这样的预期结果思考:(1,2)定义为“1和2相似”(2,3)被定义为“2和3相似”(1,4)被定义为“1和4相似”(1,3)被定义为“1和3相似”。根据这些相似性,我得出结论,组(1,2,3)彼此相似,但组(1,2,3,4)不相似。为了形成组(1,2,3,4),数据中应该有其他条目,如(2,4),(3,4)最后,我想找到给定坐标系中的所有组。(为我糟糕的帖子感到抱歉)你能告诉我解决这个NP计算问题的任何工具吗?可以解决它,但你需要迭代每个小团体的大小,直到你知道的最大团体大小。是的,这就是我要找的。我只需要用我现有的解决方案进行基准测试。但我相信这比我的解决方案好。我从给定的数据中永远不知道最大团体大小。my数据将有大约2000到3000万个坐标。在我的情况下,最好的结果应该是拥有最大团体规模的组。我不确定此模块是否适合在约3000万条记录上使用,因为它使用正则表达式来解决它。尝试一下,将其与传统解决方案进行比较会很有趣:)无论如何,我的观点是,任何解决方案在大量数据的情况下都是低效的。这是因为所有的解决方案都将位于EXP complexity类中的某个位置。只需尝试为(my$i=0;my$i)运行