algorithm - 查找哈希中剩余的较小值

标签 algorithm perl hash

交叉发布于 http://perlmonks.org/index.pl?node_id=977333

给定以下哈希:

my %hash = (1 => "i", 2 => "j", 3 => "k", 4=> "l");

和输入对

   my @pair  = (1,2);   
   my @pair2 = (2,3);  
   my @pair3 = (1,3);
   my @pair4 = (2,4);

我们想在 %hash 中找到值小于成员的键 任何给定的对。

因此所需的输出是:

@pair -> []
@pair2 -> [1]
@pair3 -> [2]
@pair4 -> [1,3]

执行此操作的正确算法是什么? 以下是我的代码但失败了:

sub get_output {
     my ($inputhash,$pair) = @_;

  my @output = ();
  my %done = ();
  foreach my $pr (@{$pair}){
     foreach my $kn (keys %{$inputhash}){
             next if ($pr <= $kn || $done{$kn});
             push @output,$kn;  
             $done{$kn} = 1;

     }
  }

  use Data::Dumper;
  print Dumper \@output;
  return @output;
}

最佳答案

这不是很有效,但它有效。鉴于您请求的输出不涉及哈希,仍然看不到哈希的意义。:

#!/usr/bin/perl

use strict;
use warnings;
my %hash = (1 => "i", 2 => "j", 3 => "k", 4=> "l");
my @pair = (1,2); #tested all your cases and it showed to work
my $it;
my $iterator;
my $sit;
my @occurence;
my @oldpair = @pair;
@occurence =  (0, 0, 0, 0);
foreach(@oldpair)
{
if ($_ == 1)
{
    $occurence[0] += 1;
}
if ($_ == 2)
{
    push(@pair, 1);
    $occurence[0] += 1;
    $occurence[1] += 1;
}
if ($_ == 3)
{
    push(@pair, 2);
    $occurence[1] += 1;
    $occurence[2] += 1;
}
if ($_ == 4)
{
    push(@pair, 3);
    $occurence[2] += 1;
    $occurence[3] += 1;
}
}

foreach $iterator(@occurence)
{
    $it++;
    if ($iterator > 1)
    {
        @pair = grep { $_ != $it } @pair;
    }

}
foreach $sit(@oldpair)
{
    @pair = grep { $_ != $sit } @pair;
}

关于algorithm - 查找哈希中剩余的较小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11117530/

相关文章:

php - 查询好友和好友的好友优化

algorithm - 创建多个组合,总和为 100

java - java中的文本匹配名称

javascript - 使用中点圆算法生成实心圆的点

Java 位掩码编码多个大小不同的整数

regex - 如何匹配满足我的正则表达式模式的最短可能的字符序列?

perl - 如何访问定义为常量的 Perl 散列

perl - 通过 perl mechanize 提取唯一 URL 和相关链接文本的最佳方法是什么?

Ruby - 告诉用户一天中的哪个阶段和一年中的哪个季节(使用哈希)

java - .Net 相当于 Java 的 System.identityHashCode()