You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现reverse_k_nearest_neighbors函数?求技术指导

求助:实现反向k近邻函数reverse_k_nearest_neighbors

我需要编写reverse_k_nearest_neighbors(k, q, A)函数,计算集合𝐴中点𝑞(𝑞∈𝐴)的反向k近邻,返回按邻居在𝐴中索引排序的有序列表。

我已经完成了k_nearest_neighbors(k, q, A)和all_k_nearest_neighbors(k, A)的编码,代码通过所有测试,且受限制仅能使用list、sort、append等少量Python方法,代码如下:

import math 

def euclidian_distance(a, b):
    # 计算二维空间中两点a和b之间的欧氏距离
    return math.sqrt((a[0] - b[0])**2 + (a[1] - b[1])**2)

def k_nearest_neighbors(k, q, A):
    """计算A中q点的k个最近邻"""
    # 距离计算的参考点
    ref = A[q]
    distance = []

    # 计算参考点与A中其他所有点的距离
    for i in range(len(A)):
        if i != q:
            distance.append((euclidian_distance(A[i], ref), i))

    # 按距离排序,获取k个最近邻的索引
    distance.sort(key=lambda x: x[0])
    indices = [i for dist, i in distance[:k]]

    # 手动实现索引排序(不使用sorted())
    for i in range(len(indices) - 1):
        min_index = i
        for j in range(i + 1, len(indices)):
            if indices[j] < indices[min_index]:
                min_index = j
        indices[i], indices[min_index] = indices[min_index], indices[i]

    return indices

# 测试用例
A = [[0.0,0.0], [1.0,1.0], [4.0,1.0], [0.0,3.0], [1.0,3.0]]
assert k_nearest_neighbors(2,0,A) == [1,3]
assert k_nearest_neighbors(2,1,A) == [0,4]
assert k_nearest_neighbors(2,2,A) == [1,4]
assert k_nearest_neighbors(2,3,A) == [1,4]
assert k_nearest_neighbors(2,4,A) == [1,3]

def all_k_nearest_neighbors(k, A):
    """计算A中所有点的k个最近邻"""
    results = []
    
    for i in range(len(A)):
        results.append(k_nearest_neighbors(k, i, A))
    
    return results

# 测试用例
A = [[0.0, 0.0], [1.0, 1.0], [4.0, 1.0], [0.0, 3.0], [1.0, 3.0]]
assert all_k_nearest_neighbors(2, A) == [[1, 3], [0, 4], [1, 4], [1, 4], [1, 3]]

但我完全不知道如何编写reverse_k_nearest_neighbors函数,尝试的代码均无法通过以下测试用例,请求帮助:

# 测试用例
A = [[0.0,0.0], [1.0,1.0], [4.0,1.0], [0.0,3.0], [1.0,3.0]]
assert reverse_k_nearest_neighbors(2,0,A) == [1]
assert reverse_k_nearest_neighbors(2,1,A) == [0,2,3,4]
assert reverse_k_nearest_neighbors(2,2,A) == []
assert reverse_k_nearest_neighbors(2,3,A) == [0,4]
assert reverse_k_nearest_neighbors(2,4,A) == [1,2,3]

内容的提问来源于stack exchange,提问作者Mettid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 12:10:32