in reply to Re: Converting Arrays into Matrix
in thread Converting Arrays into Matrix

Oh, I didn't see the previous two posts.
They find indeed the correct number of common "rows". There is however the problem that the order is not fully conserved.

[qw( A B C D E F G H I )],[qw( A D C X F G H I )]
With "conserved" I mean, that in the second vector, the "X" comes after the "C" and in front of "F".
The last two versions output the aligned vectors such that the "X" is at the end, i.e. after the "I".

The letters stand for a process flow and its order must be conserved (and there is no way of sorting them as the names are arbitrary human readable things) ;)
Greetings, Jan

Replies are listed 'Best First'.
Re^3: Converting Arrays into Matrix
by LanX (Saint) on Apr 27, 2011 at 15:53 UTC
    You can use my code with which ever order you want, just provide a sorted array to loop through.

    UPDATE: you might think that the wanted sorting is obvious, but that's wrong.

    take  [[qw/A X C/][qw/A Y C/] and find a heuristic that decides the order of X and Y.

    You must be explicit about the order!!!

    Cheers Rolf

      Dear Rolf
      You are right. However, In my case, the order of X and Y will be determined by a second (or nth) different vecor.
      What I mean is: There might be an arrays, which will be processed later like
      [qw/A B C X K/][qw/A B Y I J/]
      This means, that looking vertically at it: The Y comes before the X (right after B whereas the X comes after C) ...
      I think, I am doing a really bad job in explaining ... But do you know what I mean?
      Greetings, Jan
      In another post, I have provided sample data, where the diff algorithm doesnt produce what I expect. I will try and check yours as soon as possible.
      Jan
        Jan, I know what you mean but I doubt that you are right.

        The sample data you gave us so far is not sufficient to determine a strict order of all elements.

        (update e.g for the data given in Re^3: Converting Arrays into Matrix it's impossible to tell if A or 3 is the first element.)

        And it doesn't make much sense that someone else ordered different subsets in such a way without you already knowing that order.

        Anyway if you're theory is true, there is a pretty straight forward way to calculate this order.

        Check the first element of all sets, if exactly one of them never appears in a higher position you found your alpha-element.

        Now delete alpha from all sets and start again investigating the first elements to detect your beta.

        At the end you either have a strict order in an array @ordered or you've found at least one case of ambiguity of your data.

        Then put @ordered into my algorithm instead of sort keys ... and you've got your matrix.

        Cheers Rolf