ARTS打卡32-Flink与Python更配

Algorithm做算法题,Review点评英文文章,Tip总结技术技巧,Share做技术分享。每周打卡一次,这就是ARTS打卡。

1. 做算法题

LeetCdoe面试题 17.26. 稀疏相似度

题目描述:

两个(具有不同单词的)文档的交集(intersection)中元素的个数除以并集(union)中元素的个数,就是这两个文档的相似度。例如,{1, 5, 3} 和 {1, 7, 2, 3} 的相似度是 0.4,其中,交集的元素有 2 个,并集的元素有 5 个。给定一系列的长篇文档,每个文档元素各不相同,并与一个 ID 相关联。它们的相似度非常“稀疏”,也就是说任选 2 个文档,相似度都很接近 0。请设计一个算法返回每对文档的 ID 及其相似度。只需输出相似度大于 0 的组合。请忽略空文档。为简单起见,可以假定每个文档由一个含有不同整数的数组表示。

输入为一个二维数组 docs,docs[i] 表示 id 为 i 的文档。返回一个数组,其中每个元素是一个字符串,代表每对相似度大于 0 的文档,其格式为 {id1},{id2}: {similarity},其中 id1 为两个文档中较小的 id,similarity 为相似度,精确到小数点后 4 位。以任意顺序返回数组均可。

示例:输入:
[
[14, 15, 100, 9, 3],
[32, 1, 9, 3, 5],
[15, 29, 2, 6, 8, 7],
[7, 10]
]
输出:
[
“0,1: 0.2500”,
“0,2: 0.1000”,
“2,3: 0.1429”
]

解题思路:

Python中集合有交和并运算,将题目中的列表转换为集合后可得到交集、并集大小。题目的难点在于相似度保留4位小数。由于计算机二进制无法精确表示浮点数,round函数做四舍五入可能不精确,为了消除二进制存储浮点数会截断(变小)的影响,浮点数加上1e-9后进行round计算。

解题代码:

class Solution:
    def computeSimilarities(self, docs: List[List[int]]) -> List[str]:
        def div_fun(x:int, y:int) -> str:
            div = x / y + 1e-9 
            div_str = str(round(div, 4))
            if len(div_str) < 6:
                div_str = div_str + '0'*(6-len(div_str))
            return div_str
            
        L_str = []
        
        for i in range(len(docs)):
            docs[i] = set(docs[i])
            
        for i in range(len(docs)):
            for j in range(i+1, len(docs)):
                intersection_ij = docs[i] & docs[j]
                union_ij = docs[i] | docs[j]
                if len(intersection_ij) == 0:
                    continue
                else:
                    similarity_ij =  div_fun(len(intersection_ij),len(union_ij))
                    L_str.append(str(i)+','+str(j)+': '+similarity_ij)
                    
        return L_str

2.点评英文文章

文章《What is Python Good for?》是一名Java程序员写的,推荐使用Python作为一项兵器加入到程序员的武器库中。文中列举了Python的诸多优点,总结一下主要是易上手、生态丰富、框架成熟、应用广泛,就像AK47自动步枪。

3. 技术技巧

独立博客想要引导到微信公众号上,除了在文章末尾放一张公众号的二维码,还有什么办法呢?可以使用openwrite实现readmore功能,需要关注微信公众号,从公众号获取验证码才能继续阅读文章。

4. 技术分享

学习PyFlink教程,python与flink结合是发展的必然,python应用于数据分析和机器学习领悟,flink应用于大数据流计算领悟,两者结合互相提升。将flink的能力输出python用户,python生态的计算功能运行到flink上,相辅相成。目前pyflink1.11可支持python数据处理库pandas,并可实现kmeans等算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值