Пусть Os будет частично упорядоченным множеством, и с учетом любых двух объектов O1 и O2 в Os, F (O1, O2) вернет 1, если O1 больше, чем O2, -1, если O1 меньше, чем O2, 2, если онинесравнимы, и 0, если O1 равно O2.
Мне нужно найти подмножество Mn элементов, это Os, которые являются минимальными.То есть для каждого A в Mn, и для каждого B в Os, F (A, B) никогда не равно 1.
Это не сложно, но я уверен, что это можно сделать вболее питонический путь.
Быстрый и грязный способ:
def GetMinOs(Os):
Mn=set([])
NotMn=set([])
for O1 in Os:
for O2 in Os:
rel=f(O1,O2)
if rel==1: NotMn|=set([O1])
elif rel==-1: NotMn|=set([O2])
Mn=Os-NotMn
return Mn
В частности, я не доволен тем фактом, что по сути я прохожу все элементы N ^ 2 раза.Интересно, может ли быть динамичный путь?Под «динамическим» я подразумеваю не просто быстрое, но также и такое, что как только что-то обнаруживается, что невозможно в минимуме, возможно, его можно снять.И все это делает pythonic , элегантный способ