Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
#!/usr/bin/env python
from fileinput import input
data = []
result = []
for x in input():
d = x[::-1]
if d[1] != ".":
data.append(d)
else:
data.append(d[2:])
data.sort()
i = 0
while i < len(data)-1:
dom = data[i]
j = i+1
while j < len(data)-1:
if data[j].startswith(dom+"."):
data.pop(j)
else: break
i = i+1
for y in data:
print y[::-1]
ads-domain-filter.py input.txt | egrep -v "^$" | sort | uniq > output.txt
Сжимаем список IP-адресов наилучшим образом

Если мы сожмём сеть 192.168.20.0/29, тогда мы уберём 5 записей из списка ...
P.S. А еще у Вас не принимается во внимание, что адреса со всеми нулями и единицами в номере хоста не надо учитывать в числе «лишних», т.к. в подсети их и так нет. Но это уже сложно и неоднозначно, т.к. наше искусственное объединение адресов в подсети далеко не всегда соответствует реально существующим подсетям.
Родительские Кв плывут потому что не учитывают, что в объединяемых записях… уже присутствует некоторое количество фиктивных IP, попавших туда «за компанию».
Т.е. временная сложность уже не менее O(n^2).
Но до идеала будет далеко, т.к. многие ветви будут вырожденными — просто не будет их в реестре.
а где находится следующая по выгоде псевдосеть с наибольшим оставшимся коэффициентом?
self.max_child_weight = 0
for Child in self.children:
self.max_child_weight = max(self.max_child_weight, Child.weight, Child.max_child_weight)
Сжимаем список IP-адресов наилучшим образом