Задать вопрос
@ruboss

Как понять Perl или перевести на другой язык (java, c++, php, javascript)?

Всем привет, господа! Есть multilingual люди?)
Пишу приложение связанное с распознаванием образов. Необходимо реализовать алгоритм LSH - для хеширования точек из многомерного пространства. Нашел вроде хорошую реализацию, но Perl не знаю, учить нету времени
Кто знает как перевести функцию do_hashing на любой из языков: java, c++, php, javascript?

sub do_hashing {
    my $self   = shift;
    my $vector = shift;
    if ( ref $vector ne 'ARRAY' ) {
        carp("args should be an array_ref") and return;
    }
    my $d = $self->d || sub { $self->d( int @$vector ) }
      ->();
    if ( $d != scalar @$vector ) {
        carp("invalid dimention number") and return;
    }
    my $L          = $self->L;
    my $unary_code = $self->_unarize($vector);
    my @hashes;
    for my $i ( 0 .. $L - 1 ) {
        my @array;
        for my $j ( @{ $self->_pickuped_indexes->[$i] } ) {
            push( @array, $unary_code->[$j] );
        }
        push( @hashes, \@array );
    }
    return \@hashes;
}

sub _pickuped_indexes {
    my $self = shift;
    $self->_indexes or sub {
        my @indexes;
        my $L = $self->L;
        for my $i ( 0 .. $L - 1 ) {
            my %seen;
            while (1) {
                my $rand = int( rand( $self->d * $SCALE ) );
                if ( !$seen{$rand} ) {
                    $seen{$rand} = 1;
                    last if keys %seen == $self->k * $SCALE;
                }
            }
            push( @indexes, [ sort { $a <=> $b } keys %seen ] );
        }
        $self->_indexes( \@indexes );
      }
      ->();
}

sub _unarize {
    my $self   = shift;
    my $vector = shift;
    my $max    = max(@$vector);
    my $n      = $SCALE / $max;
    my @unary;
    for (@$vector) {
        my $i = int( $_ * $n );
        my $j = $SCALE - $i;
        for ( 1 .. $i ) {
            push( @unary, 1 );
        }
        for ( 1 .. $j ) {
            push( @unary, 0 );
        }
    }
    return \@unary;
}


Может будет кому полезно - ссылка на алгоритм https://metacpan.org/pod/release/MIKI/Algorithm-LS...
  • Вопрос задан
  • 723 просмотра
Подписаться 1 Оценить 4 комментария
Решения вопроса 1
А сам-то модуль тоже переводить надо, да? =)
Не занимайтесь ерундой. Либо сами пишите, либо сами перекладывайте.
Самый отличный вариант уже предложили: вызов скрипта из вашего ява-приложения.

Но я дам один очень простой совет: прочтите скрипт на перле вслух. Как обыкновенный текст (опуская итерации и прочее).
Вам сразу всё станет понятно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы