Presentando AjGroups: Librería de Grupos Finitos

Published on Author lopezLeave a comment

Estuve escribiendo una librería de clases C# para manejar grupos finitos. Un grupo es un conjunto G de elementos dotados de una operación binaria *, dondee:

a * b  is in G    (clausura)

a * (b * c) = (a * b) * c        (asociatividad)

a * a’ = e     (existencia de inverso e identidad)

a * e = e * a   (identidad)

El código de la solución está en AjCodeKata Google Project, en trunk/AjGroups:

Las principales interfaces son:

IElement tiene un método Multiply, que recibe otro IElement y retorna el resultado IElement. IElement.Order es el número de elementos a ser multiplicados para obtener la identidad:

a * a * a ….. * a = e

IGroup.Elements es la colección de IElements que son elementos del grupo. IGroup.Order es la cantidad de elementos.

Hay dos implementaciones de esas interfaces: una basada en permutaciones, otra basada en elementos con nombre (como “a”, “e”) y una tabla describiendo sus multiplicaciones.

Hay métodos para:

– Obtener los subgrupos de un grupo
– Obtener los subgrupos normales de un grupo
– Determinar si dos grupos son isomorfos

Seguí Test-Driven Development (TDD). Todos los tests en verde:

Buen code coverage:

Debería hacer algún refactoring, pero el proyecto va tomando forma. Escribiré posts describiendo la implementación de permutaciones, y la otra, la basada en elementos abstractos.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

Leave a Reply

Your email address will not be published. Required fields are marked *