[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