Supongamos que tengo 400 estudiantes (que están en una gran universidad) que tienen que hacer un proyecto de informática y que tienen que trabajar solos (sin grupo de estudiantes). Un ejemplo de proyecto podría ser "implementar un algoritmo rápido de transformación de Fourier en fortran" (lo sé, eso no suena sexy pero eso hace que mi pregunta sea más simple). Soy el corrector y quiero enviar rutinas para verificar si hay grupos de estudiantes que han propuesto la implementación que son "demasiado similares para ser escritos de manera verdaderamente independiente".
Esta es una búsqueda no supervisada de clústeres. Creo que la pregunta es más sobre qué atributos usar en lugar de qué algoritmo de agrupamiento usar. Lo primero que haría es un histograma letra por letra. Idealmente, dado que los tramposos son más inteligentes que eso, eventualmente probaría permutaciones aleatorias de letras bien elegidas para ver si existe una buena coincidencia del histograma de la letra (con permutación). También que aquellos que no exploran la estructura del código, solo la distribución marginal de las letras ... ¿qué solución tienen? ¿Hay software o paquetes existentes dedicados a ese problema? (en realidad, en mis viejos tiempos, los profesores de informática decían que tenían ese tipo de herramienta, pero ahora sospecho que tenían algo muy simple)
Supongo que el abogado de los desarrollos de software también tiene ese tipo de problemas (no con 1000 estudiantes, sino con 2 códigos grandes ... lo que hace las cosas más difíciles).
fuente
Desde el mundo anti plagio, anteriormente me encontré con la noción de "isomorfismo gráfico". Quizás también puedas echarle un vistazo a eso.
LCS - La subsecuencia común más larga también es posible. Pero intente comparar todas estas soluciones y vea cuál es la mejor :)
fuente