[Programación] Transformar algoritmo en pseudolenguaje a perl (aca me doy...)
Horacio Castellini
programacion@lugro.org.ar
Thu, 08 Dec 2005 09:36:45 -0300
Holas.... Pido una ayuda para transformar el siguiente algoritmo escrito
en pseudo código a lenguaje perl... ya que hay cosas que desconozco...
como que debo cargar antes de usar qsort y otras funciones de
biblioteca...
Entrada el vector vectores A[1..N] donde los elementos son un TAD
{a1,a2} (estructura de datos) tal que A[i].a2=F(A[i].a1), pude haber
elementos repetidos y la función no es inyectiva... Salida una matriz
binaria (en representación vector), donde solo imprimo los elementos no
nulo, se inicia toda con ceros. (si ya sé que es complejo y no le
estudié la complejidad para sacarle el N**p... pero no es relevante eso)
===================================================================
1) Ordenar lexicográficamente A[1...N] de acuerdo al campo "a1".
2) Busca la cantidad de elementos lexicográficamente diferentes en el
campo "a1"
cont2<-0
para i<-1 hasta N-1 hacer
si A[i].a1!=A[i+1].a1 entonces cont2<-cont2+1 finsi
finpara
3) Crear T1[1..cont2] // para guardar todos los "a1" diferentes... con
el TAD {a1,f} donde f es la frecuencia de apariciones de a1... se inicia
siempre T1[k].f<-0
3.1)
para i<-1, j<-2,T1[1]=A[1].a1 hasta N-1 hacer
si A[i].a1!=A[i+1].a1 entonces
T1[j]<-A[i+1].a1
j<-j+1
sino
T1[j-1].f<-T1[j-1].f+1
finsi
finpara
4) Ordenar con qsort T1 numéricamente por el campo "f"
5) Ordenar con qsort A lexicográficamente por el campo "a2" ahora
6) Crear la matriz binaria A[1..2*cont2] inicada en cero.
6.1) crear bandera auxiliar p[1..2]
7)
para i<-1 hasta N-1 hacer
si A[i].a2=A[i+1].a2 entonces
para j<-1 hasta cont2 hacer
si A[i].a1=T1[j].a1 entonces
p[1]=j
parar_bucle_j
finsi
finpara
para j<-1 hasta cont2 hacer
si A[i+1].a1=T1[j].a1 entonces
p[2]=j
para_bucle_j
finsi
finpara
si p[1]!=p[2] entonces
B[N1*p[1]+p[2]]<-1
B[N1*p[2]+p[1]]<-1
finsi
finsi
finpara
listo la salida es la matriz (en representación vector) B simétrica...
=====================================================================
Alguna sugerencia para llevarlo a código perl... se agradece...
Horacio.
___________________________________________________________
1GB gratis, Antivirus y Antispam
Correo Yahoo!, el mejor correo web del mundo
http://correo.yahoo.com.ar