in reply to Metric for confidence of complex match

I think i would bit-encode the numbers into a single numeric value, ordering them from most to least significant.

Eg. You have values A > B > C in terms of importance, and each could range from 0 .. 3, the the combination of A=2, B=3, C=1 would become b'101101'. Converted back to a single numeric value they can be sorted numerically and the position of the fields will weight the sort.

You'll probably have to change the pack/unpack formats (switch the first 'b' for 'B'?), and possible drop one or both of the reverses on non-intel platforms.

This assumes 6 values in the range 0 .. 3.

#! perl -slw use strict; my @data = map{ [ map{ int rand 4 } 1 .. 6 ] } 1 .. 20; my @sorted = map { $_->[1] } sort { $b->[0] <=> $a->[0] } map { my $n = unpack 'N', pack 'B32', reverse join '', map{ scalar reverse unpack 'b2', pack 'C*',$_ } @$_ ; [ $n, $_ ] } @data; print "@$_" for @sorted; __END__ P:\test>503446.pl 3 3 2 3 3 3 3 3 2 3 1 0 3 2 1 2 2 1 3 1 3 3 1 0 3 0 3 1 2 2 3 0 0 2 1 3 2 2 1 1 2 1 2 1 3 3 3 0 2 0 0 3 0 3 2 0 0 2 1 0 1 3 3 3 2 1 1 3 1 0 1 2 1 2 1 0 1 1 1 0 3 1 2 2 1 0 0 1 2 1 0 1 3 1 2 3 0 1 1 3 3 0 0 1 0 3 3 1 0 0 0 3 3 2 0 0 0 3 1 3

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: Metric for confidence of complex match
by BrowserUk (Patriarch) on Oct 28, 2005 at 05:34 UTC

    A rather simpler and portable version of the above that also contrasts the results with both the sum and product of the same values. It shows how the positional weighting remais true when the sum and product do not:

    #! perl -slw use strict; use List::Util qw[ sum reduce ]; our $SEED ||=1; srand( $SEED ); my @data = map{ [ map{ int rand 4 } 1 .. 6 ] } 1 .. 20; my @sorted = map { $_->[1] } sort { $b->[0] <=> $a->[0] } map { my $n = reduce{ $a << 2 | $b } 0, @$_; [ $n, $_ ] } @data; print "@$_\tsum:", sum( @$_ ), "\tproduct: ", reduce{ $a *= $b||1 } 1, + @$_ for @sorted; __END__ P:\test>503446.pl -SEED=-999998 3 2 2 3 1 1 sum:12 product: 36 3 2 0 1 3 2 sum:11 product: 36 3 1 3 1 3 0 sum:11 product: 27 3 1 3 0 0 2 sum:9 product: 18 3 0 2 2 3 2 sum:12 product: 72 3 0 1 1 0 0 sum:5 product: 3 2 2 1 0 1 2 sum:8 product: 8 2 1 1 0 3 2 sum:9 product: 12 2 1 0 3 1 1 sum:8 product: 6 2 0 3 0 2 2 sum:9 product: 24 2 0 1 1 2 1 sum:7 product: 4 1 3 2 2 2 0 sum:10 product: 24 1 3 0 1 3 1 sum:9 product: 9 1 2 1 1 0 1 sum:6 product: 2 1 1 3 2 3 0 sum:10 product: 18 1 0 2 0 1 1 sum:5 product: 2 0 3 3 0 1 2 sum:9 product: 18 0 2 3 2 0 0 sum:7 product: 12 0 2 3 0 3 1 sum:9 product: 18 0 1 3 0 3 1 sum:8 product: 9 P:\test>503446.pl -SEED=1000 3 3 0 3 0 0 sum:9 product: 27 3 3 0 2 3 3 sum:14 product: 162 3 1 3 1 3 0 sum:11 product: 27 3 1 3 0 0 2 sum:9 product: 18 3 0 2 2 3 2 sum:12 product: 72 3 0 1 1 0 0 sum:5 product: 3 2 2 1 0 1 2 sum:8 product: 8 2 1 1 0 3 2 sum:9 product: 12 2 1 0 3 1 1 sum:8 product: 6 2 0 3 0 2 2 sum:9 product: 24 2 0 1 1 2 1 sum:7 product: 4 1 3 2 2 2 0 sum:10 product: 24 1 3 0 1 3 1 sum:9 product: 9 1 2 1 1 0 1 sum:6 product: 2 1 1 3 2 3 0 sum:10 product: 18 1 0 2 0 1 1 sum:5 product: 2 0 3 3 0 1 2 sum:9 product: 18 0 2 3 2 0 0 sum:7 product: 12 0 2 3 0 3 1 sum:9 product: 18 0 1 3 0 3 1 sum:8 product: 9

    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.