¡Mi matemática fu me está fallando! Necesito una forma eficiente de reducir los rangos de red a superconjuntos, p. si la lista de entrada de rangos de IP:necesita un algoritmo para colapsar rangos de netblock en listas de rangos de superconjuntos
- 1.1.1.1 a 2.2.2.5
- 1.1.1.2 a 2.2.2.4
- 10.5.5.5 a 155.5.5.5
- 10.5.5.6 a 10,5. 5,7
quiero devolver los siguientes rangos:
- 1.1.1.1 a 2.2.2.5
- 10.5.5.5 155.5.5.5 a
Nota: las listas de entrada no están ordenados (a pesar de que podría ser?). La forma ingenua de hacerlo es verificar cada rango en la lista para ver si el rango de entrada x es un subconjunto, y si es así, NO inserte el rango x. Sin embargo, siempre que inserte un nuevo rango, podría tratarse de un superconjunto de rangos existentes, por lo que debe verificar los rangos existentes para ver si se pueden contraer (p. Ej., Eliminarlos de mi lista).
¿Los rangos van a ser disjuntos? Si no, ¿cómo quieres que tu algoritmo maneje rangos superpuestos, muchos de los cuales un subrango podría ser parte? – HenryR
¿Cuál es el problema con el uso del algoritmo 'ingenuo' que describes? Me parece bien ... –
¡Gran pregunta! Los usuarios pueden ingresar los rangos que quieran, por lo que no se garantiza que sean disjuntos. Sería bueno si todos los rangos contiguos pudieran colapsarse en uno, en realidad. –