Re: [Scilab-users] Find the position of vector in another vector

2014-07-23 Thread an.lld
thanks Serge Steer, the code does exactly what I wanted



--
View this message in context: 
http://mailinglists.scilab.org/Find-the-position-of-vector-in-another-vector-tp4030943p4030946.html
Sent from the Scilab users - Mailing Lists Archives mailing list archive at 
Nabble.com.
___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users


Re: [Scilab-users] Find the position of vector in another vector

2014-07-22 Thread Serge Steer
One can use the Morris and Pratt algrithme 
(http://www.liafa.jussieu.fr/~carton/Enseignement/Algorithmique/Programmation/Pattern/MorrisPratt/)
I give you a Scilab code of this algorithm. But it should be more 
efficient to add a builtin using the C code given at


http://www.liafa.jussieu.fr/~carton/Enseignement/Algorithmique/Programmation/Pattern/MorrisPratt/pattern.c


Le 22/07/2014 11:38, an.lld a écrit :

hello scilab users,

i have a problem, i'm trying to find a vector into another vector. my vector
looks like this:
A=[7  342  75  36  36  36  9  64  213  82  36  36  36  9  72]

i would like to find the position of the under vector
B=[36 36 36] in A
so that i get a vector C=[4 11]... (4 and 11 are the positions where the
vector B begins).

i have already tried: [v,ka,kb]=intersect(A,B), but this function searches
only the first occur of 36 in A.
has somebody  an idea how i can realize that?

sorry, for my bad english.



--
View this message in context: 
http://mailinglists.scilab.org/Find-the-position-of-vector-in-another-vector-tp4030943.html
Sent from the Scilab users - Mailing Lists Archives mailing list archive at 
Nabble.com.
___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users



function ind=morrisPratt(sequence,pattern)

// Calcul de la fonction de suppléance s
// Pour tout i  0, s[i] est la longueur bord maximal du 
// préfixe de longueur i du motif, c'est-à-dire p_0 ... p_{i-1}.
// Pour un préfixe w du motif, on a |bord(w)| = s[|w|].
// On a donc |bord^2(w)| = s[|bord(w)|] = s[s[|w|]].
// Les longueurs des bords d'un préfixe w sont donc les valeurs
// s[|w|], s[s[|w|]], s[s[s[|w|]]] ...
  m=length(pattern)
  n=length(sequence)
  ind=[];
  i=-1;
  s(1) = -1;
  for j = 1:m
while i = 0  pattern(i+1)  pattern(j-1)
  i = s(i+1);
end
s(j) = i+1;
  end
  // Recherche du motif
  
  j = 0;
  while jn 
i = 0;
while i  m  jn
  if pattern(i+1) == sequence(j+1) then
// Si les deux caractères coïncident, 
// les deux curseurs avancent d'une position vers la droite.
j=j+1;
i=i+1;
  else
if i==0 then
  j=j+1;
else
  i = s(i+1);
end
  end
end
if i == m then
  // Occurrence trouvée en position j-i
  ind=[ind j-i+1];
else
  // Aucune occurrence
  break
end
  end
endfunction

___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users