69 lines
1.5 KiB
Python
69 lines
1.5 KiB
Python
|
|
import bisect
|
|
import random
|
|
import functools
|
|
|
|
class Várólista:
|
|
def __init__(self):
|
|
pass
|
|
def extend(self, elemek):
|
|
for elem in elemek: self.append(elem)
|
|
|
|
|
|
def Verem():
|
|
return []
|
|
|
|
|
|
class Sor(Várólista):
|
|
def __init__(self):
|
|
self.A = []; self.kezd = 0
|
|
def append(self, elem):
|
|
self.A.append(elem)
|
|
def __len__(self):
|
|
return len(self.A) - self.kezd
|
|
def extend(self, elemek):
|
|
self.A.extend(elemek)
|
|
|
|
def pop(self):
|
|
e = self.A[self.kezd]
|
|
self.kezd += 1
|
|
if self.kezd > 5 and self.kezd > len(self.A)/2:
|
|
self.A = self.A[self.kezd:]
|
|
self.kezd = 0
|
|
return e
|
|
|
|
|
|
|
|
class RLElem:
|
|
def __init__(self,érték,elem):
|
|
self.értékem = érték
|
|
self.elemem = elem
|
|
def __lt__(self,másik):
|
|
return self.értékem < másik.értékem
|
|
def érték(self):
|
|
return self.értékem
|
|
def elem(self):
|
|
return self.elemem
|
|
|
|
class RendezettLista(Várólista):
|
|
def __init__(self, f):
|
|
self.A=[]
|
|
self.f=f
|
|
def append(self, elem):
|
|
pár = RLElem(self.f(elem),elem)
|
|
bisect.insort(self.A, pár)
|
|
def __len__(self):
|
|
return len(self.A)
|
|
def pop(self):
|
|
return self.A.pop(0).elem()
|
|
|
|
|
|
def argmin(lista, fv):
|
|
legjobb = lista[0]; legjobb_érték = fv(legjobb)
|
|
for x in lista[1:]:
|
|
x_érték = fv(x)
|
|
if x_érték < legjobb_érték:
|
|
legjobb, legjobb_érték = x, x_érték
|
|
return legjobb
|
|
|