1
特定の点の最近傍点を返した後、次に近い点を別の点に戻すときに、前と同じ最も近い点が返されます。何故ですか?最も近いポイントは、ツリー内の全体の異なる場所に等しいなぜですか?
class kdnode:
def __init__(self,point,left,right):
self.point = point
self.left = left
self.right = right
class kdTree:
def __init__(self,points,threshold):
self.threshold = threshold
self.root = self.make_kdtree(points)
self.froot = None
self.isFirst = True
def make_kdtree(self,points,depth = 0):
if(len(points) <= self.threshold):
return kdnode(points,None,None)
dimension = 2
axis = depth % dimension
sp = sorted(points,key = lambda point:point[axis])
mid = len(points)//2
return kdnode(sp[mid],self.make_kdtree(sp[:mid],depth+1),self.make_kdtree(sp[mid+1:],depth+1))
def find_closest(self,point,depth=0):
if self.isFirst:
self.froot = self.root.point
self.isFirst = False
if(self.root.left) is None and self.root.right is None:
return self.root.point
axis = depth%2
if point[axis] > self.root.point[axis]:
self.root = self.root.right
else:
self.root = self.root.left
return self.find_closest(point,depth+1)
ありがとうございます。しかし、あなたはそれをもっとはっきりと説明できますか? –
'self'は現在のオブジェクトです。 'self.isFirst = False'は現在のオブジェクトを変更します。次にfind_closest()を呼び出すと、変更したので同じではありません。 – remram