【LeetCode击败99%+】两个稀疏向量的点积

题目

  • 给定两个稀疏向量,计算它们的点积(数量积)。

  • 实现类 SparseVector:

  • SparseVector(nums) 以向量 nums 初始化对象。

  • dotProduct(vec) 计算此向量与 vec 的点积。

  • 稀疏向量 是指绝大多数分量为 0 的向量。你需要 高效 地存储这个向量,并计算两个稀疏向量的点积。

示例 1:

输入:nums1 = [1,0,0,2,3], nums2 = [0,3,0,4,0]
输出:8
解释:v1 = SparseVector(nums1) , v2 = SparseVector(nums2)
v1.dotProduct(v2) = 1*0 + 0*3 + 0*0 + 2*4 + 3*0 = 8

示例 2:

输入:nums1 = [0,1,0,0,0], nums2 = [0,0,0,0,2]
输出:0
解释:v1 = SparseVector(nums1) , v2 = SparseVector(nums2)
v1.dotProduct(v2) = 00 + 1*0 + 0*0 + 0*0 + 0*2 = 0

示例 3:

输入:nums1 = [0,1,0,0,2,0,0], nums2 = [1,0,0,0,3,0,4]
输出:6

提示:

n == nums1.length == nums2.length
1 <= n <= 10^5
0 <= nums1[i],nums2[i] <= 100

代码

class SparseVector {
    
    private int[] vector;

    SparseVector(int[] nums) {
        vector = nums;
    }

    // Return the dotProduct of two sparse vectors
    public int dotProduct(SparseVector vec) {
        int ans = 0;
        for (int i = 0; i < vector.length; i++) {
            ans += vector[i] * vec.vector[i];
        }
        return ans;
    }
}

// Your SparseVector object will be instantiated and called as such:
// SparseVector v1 = new SparseVector(nums1);
// SparseVector v2 = new SparseVector(nums2);
// int ans = v1.dotProduct(v2);

结果

用时内存
击败100.00%击败40.79%

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/dot-product-of-two-sparse-vectors
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最近的研究表明,稀疏表示(SR)可以很好地解决许多计算机视觉问题,并且其内核版本具有强大的分类能力。 在本文中,我们解决了协作SR在半监督图像注释中的应用,该方法可以增加标记图像的数量,以进一步用于训练图像分类器。 给定一组已标记(训练)的图像和一组未标记(测试)的图像,通常的SR方法(我们称为正向SR)用于用几个已标记的图像表示每个未标记的图像,然后根据这些标记的注释的注释。 但是,就我们所知,SR方法是在相反的方向上进行的,我们称向后SR用几个未标记的图像表示每个标记的图像,然后根据标记的图像的注释对任何未标记的图像进行注释,即未标记的图像由后向SR选择表示,到目前为止尚未解决。 在本文中,我们探索后向SR可以对图像注释做出多少贡献,并可以对前向SR进行补充。 事实证明,只有在两个分类器相对独立的情况下,这种共同训练才是相互监督的半监督方法,然后采用该共同训练来证明两个SR在相反方向上的这种互补性。 最后,在内核空间中对两个SR进行共同训练,建立了用于图像标注的协作式内核稀疏表示(Co-KSR)方法。 实验结果和分析表明,两个方向相反的KSR是互补的,并且Co-KSR相对于它们中的任何一个都有明显的改善,其图像注释性能优于其他最新的半监督分类器(例如,转导支持向量机,局部和全局一致性,以及高斯场和谐波函数。 还使用非稀疏解决方案进行了比较实验,以表明稀疏度在两个相反方向上的图像表示协作中起着重要作用。 本文扩展了SR在图像标注和检索中的应用。
相关向量机的MATLAB代码,经过验证是正确的,很实用 推荐相关向量机(Relevance vector machine,简称RVM)是Tipping在2001年在贝叶斯框架的基础上提出的,它有着与支持向量机(Support vector machine,简称SVM)一样的函数形式,与SVM一样基于核函数映射将低维空间非线性问题转化为高维空间的线性问题。 RVM原理步骤 RVM通过最大化后验概率(MAP)求解相关向量的权重。对于给定的训练样本集{tn,xn},类似于SVM , RVM 的模型输出定义为 y(x;w)=∑Ni=1wiK(X,Xi)+w0 其 中wi为权重, K(X,Xi)为核函。因此对于, tn=y(xn,w)+εn,假设噪声εn 服从均值为0 , 方差为σ2 的高斯分布,则p ( tn | ω,σ2 ) = N ( y ( xi ,ωi ) ,σ2 ) ,设tn 独立同分布,则整个训练样本的似然函数可以表示出来。对w 与σ2的求解如果直接使用最大似然法,结果通常使w 中的元素大部分都不是0,从而导致过学习。在RVM 中我们想要避免这个现像,因此我们为w 加上先决条件:它们的机率分布是落在0 周围的正态分布: p(wi|αi) = N(wi|0, α?1i ),于是对w的求解转化为对α的求解,当α趋于无穷大的时候,w趋于0. RVM的步骤可以归结为下面几步: 1. 选择适当的核函数,将特征向量映射到高维空间。虽然理论上讲RVM可以使用任意的核函数,但是在很多应用问题中,大部分人还是选择了常用的几种核函 数,RBF核函数,Laplace核函数,多项式核函数等。尤其以高斯核函数应用最为广泛。可能于高斯和核函数的非线性有关。选择高斯核函数最重要的是带 宽参数的选择,带宽过小,则导致过学习,带宽过大,又导致过平滑,都会引起分类或回归能力的下降 2. 初始化α,σ2。在RVM中α,σ2是通过迭代求解的,所以需要初始化。初始化对结果影响不大。 3. 迭代求解最优的权重分布。 4. 预测新数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值