def scanD(d, ck, minSupport):
    """
    计算候选数据集CK在数据集D中的支持度，
    并返回支持度大于最小支持度 minSupport 的数据
    Args:
        D 数据集
        Ck 候选项集列表
        minSupport 最小支持度
    Returns:
        retList 支持度大于 minSupport 的集合
        supportData 候选项集支持度数据
    """

    # ssCnt 临时存放选数据集 Ck 的频率. 例如: a->10, b->5, c->8    
    ssCnt = {}
    for tid in d:
        for can in ck:
            if can.issubset(tid):
                ssCnt[can] = ssCnt.get(can, 0) + 1

    numItems = (float(len(d)))
    retList = []
    supportData = {}
    for key in ssCnt:
        # 支持度 = 候选项（key）出现的次数 / 所有数据集的数量
        support = ssCnt[key]/numItems
        # 在 retList 的首位插入元素，只存储支持度满足频繁项集的值
        if support >= minSupport:
            retList.insert(0, key)
        # 存储所有的候选项（key）和对应的支持度（support）
        supportData[key] = support
    return retList, supportData