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

isFunction函数验证关系是否为函数时返回错误False的问题排查

函数验证逻辑错误分析与修复

错误原因

  1. 核心逻辑错误:原函数第二个循环中,错误地将f中的二元组(如[1,4])与定义域A中的单个元素做归属判断——二元组永远不可能属于仅包含单个值的A,这直接导致函数无论输入是否合法,都会走到return False的分支。
  2. 遗漏值域检查:原函数未验证f中每个有序对的第二个元素是否属于值域B,不符合函数的完整数学定义。
  3. 效率瑕疵:使用ky.count(i)遍历列表统计元素出现次数,时间复杂度为O(n²),对于大集合来说效率较低。

修复后的代码

def isFunction(A, B, f):
    set_A = set(A)
    set_B = set(B)
    domain_mapping_count = {}

    # 遍历所有映射关系,检查合法性并统计次数
    for x, y in f:
        # 检查定义域元素是否合法
        if x not in set_A:
            return False
        # 检查值域元素是否合法
        if y not in set_B:
            return False
        # 统计每个定义域元素的映射数量
        domain_mapping_count[x] = domain_mapping_count.get(x, 0) + 1

    # 确保定义域中每个元素都恰好有一个映射
    for x in set_A:
        if domain_mapping_count.get(x, 0) != 1:
            return False

    return True

测试验证

合法输入测试

A = [1, 2, 3,]
B = [4, 5]
f = [[1,4], [2,5], [3,4]]
print('Returns: ', isFunction(A, B, f))  # 输出 Returns:  True

含非法元素的输入测试

A = [1, 2, 3,]
B= [4,5]
f=[[1,4],[2,5],[3 ,4], [7, 4]]
print (isFunction(A,B,f))  # 输出 False

修复说明

  • 修正了映射元素的检查逻辑:改为验证二元组的第一个元素是否属于定义域A,第二个元素是否属于值域B,符合函数的定义要求。
  • 使用集合替代列表做成员检查,将查找效率从O(n)提升至O(1)。
  • 用字典统计每个定义域元素的映射次数,避免了重复遍历列表的低效操作。
  • 严格遵循函数的数学定义:定义域中的每个元素必须有且仅有一个值域中的元素与之对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:10:21