Skip to content

Instantly share code, notes, and snippets.

@PedritoMtz
Last active December 16, 2015 02:39
import networkx as netx
import matplotlib.pyplot as grafica #Con este se genera la grafica \o/
def arbol(Lista):
G = netx.Graph()
lista1 = list(Lista)
lista2 = list()
i = 1
for i in range(len(Lista) - 1):
pu = list([lista1.pop(0)])
var1, var2 = pu[0][0], pu[0][1]
pu = list([lista1.pop(0)])
var3, var4 = pu[0][0], pu[0][1]
d1 = 0
d2 = 0
if var2 > var4: #Si el primer valor es mayor
d1 = 1
d2 = 0
else: #Si el segundo valor es mayor
d1 = 0
d2 = 1
lista2.append((var1, d1))
lista2.append((var3, d2))
c = var1+''+var3
d = var2 + var4
G.add_node(var1)
G.add_node(var3)
G.add_node(c)
G.add_edge(c, var1, color='blue')
G.add_edge(c, var3, color='blue')
puddi = lista1
lista1 = list([(c, d)])
for i in puddi:
lista1.append(i)
lista1 = ordenar2(lista1)
netx.draw(G)
#grafica.show() #Con este muestro en pantalla
grafica.savefig("Hola.png") #Con este genero el grafo en una imagen
return lista1, lista2
def ordenar2(lista):
dicc = ({})
for i, j in lista:
dicc[i] = j
lista1 = sorted(dicc.items(), key=lambda x: x[1])
return lista1
def final(elementos, palabras):
lisfi = ({})
lista = elementos
for i in range(len(elementos)):
s = list(lista.pop(-1))
var1, var2 = s[0], s[1] #Var1 es la palabra, y var2 es el valor (0 o 1)
for j in palabras:
if var1.find(j) != -1:
if lisfi.has_key(j) == True: #Si la letra ya esta en el diccionario
valor = lisfi[j]
valor = str(valor)+str(var2)
lisfi[j] = valor
else:
lisfi[j] = str(var2)
return lisfi
def atras(lista, comprimido):
var1 = ''
var2 = 0
palabra = ''
for i in comprimido:
if var2 == 0:
var1 = var1 + i
for l in lista.keys():
j = lista[l]
if var1 == j:
var1 = ''
palabra = palabra + l
var2 == 1
else:
var2 == 0
return palabra
def datos(lista):
lista1 = list()
for i, j in lista:
lista1.append(i)
return lista1
def ordenar(dicc):
dicc2 = sorted(dicc.items(), key=lambda x: x[1]) #Le los elementos del diccionario y los ordena de menor a mayor segun el valor de las claves
return dicc2
def contador(frase):
lista = list(frase)
lista2 = lista
dicc = ({})
for i in range(len(lista2)):
a = lista.pop(0)
if dicc.has_key(a) == True:
valor = dicc[a]
dicc[a] = valor + 1
else:
dicc[a] = 1
return dicc
def main():
frase = raw_input('Frase a comprimir: ')
diccionario = contador(frase)
print 'Cantidad de letras en la frase: '+str(diccionario)
diccionario = ordenar(diccionario)
print 'Lista de Letras Ordenadas: '+str(diccionario)
diccionario = list(diccionario)
d, a = arbol(diccionario) #Se manda llamar el metodo arbol y recibe dos variables ...
print '\nResultado del Arbol: '+str(a)
palabras = datos(diccionario) #Este metodo separa el diccionario en una lista
ListaFinal = final(a, palabras)
print 'Binario: '+str(ListaFinal)
compri = ''
Lista = list(frase) #Se separa la frase en una lista
for i in Lista:
compri = compri+ListaFinal[i] #Se obtiene el binario del diccionario utilizando la letra de la frase y se almacena a compri
compri = compri.replace(' ', '')
print 'Comprimido : '+str(compri)
desprin = atras(ListaFinal, compri)
print 'Descomprimido: '+str(desprin)
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment