美文网首页
L2_005集合相似度(set)

L2_005集合相似度(set)

作者: 我好菜啊_ | 来源:发表于2018-03-23 21:37 被阅读0次
  • 之前用calculate的时候超时了,我觉得是因为复制操作太多,以及插入删除操作也很多,导致很耗时,而相比之下用平衡二叉树来实现的set,find操作是对数复杂度的,所以calculate2的方法通过循环s2在是中find然后更改相同元素和总非相同元素的计数更快

#include <iostream>
#include <set>
#include <iomanip>
using namespace std;
double calculate(set<int> s1,set<int> s2)
{
    set<int> ts=s1;
    int num=s1.size();
    for(set<int>::iterator i=s2.begin();i!=s2.end();++i){//迭代器不支持小于号
        ts.insert(*i);
        s1.erase(*i);
    }
    double sum=ts.size();
    double same=num-s1.size();
    return same*1.0/sum;
}
double calculate2(set<int> &s1,set<int> &s2)
{
    double same=0;
    double sum=s1.size();
    for(set<int>::iterator i=s2.begin();i!=s2.end();++i){
        if(s1.find(*i)!=s1.end())
            ++same;
        else
            ++sum;
    }
    return same*1.0/sum;
}
set<int>* setp[51];//存指向集合的指针下标从1开始
int main()
{
    int n;cin>>n;
    for(int i=1;i<=n;++i){
        int num;cin>>num;
        setp[i]=new set<int>();
        int x;
        for(int j=1;j<=num;++j){
            cin>>x;
            (*(setp[i])).insert(x);
        }
        //一开始携程set s s.insert setp[i]=&s输出来就很奇怪
    }
    int opn;cin>>opn;
    for(int i=0;i<opn;++i){
        if(i)
           cout<<endl;
        int n1,n2;
        cin>>n1>>n2;
        cout<<setprecision(2)<<setiosflags(ios::fixed)<<calculate2(*(setp[n1]),*(setp[n2]))*100<<'%';
    }
    return 0;
}

相关文章

  • L2_005集合相似度(set)

    之前用calculate的时候超时了,我觉得是因为复制操作太多,以及插入删除操作也很多,导致很耗时,而相比之下用平...

  • Python 3 集合

    ## 集合(set) - 集合和列表非常相似 - 不同点: 1.集合中只存储不可变对象 2. 集合中...

  • Jaccard相似度和cosine相似度

    狭义Jaccard相似度: 计算两个集合之间的相似程度,元素的“取值”为0或1对集合A和B,Jaccard相似度计...

  • Redis学习笔记--sets类型及操作1

    set 是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作,操作中key ...

  • set类型操作1

    set类型 又称 集合 与list(列表)类型相似,不过set中的元素 不允许重复,而list允许元素重复 SAD...

  • Kotlin数据容器(3)✔️集合

    集合概述Set 集合不可变 Set 集合 [setOf]可变 Set 集合 [mutableSetOf、hashS...

  • Python set集合

    本文目录 set集合的基本用法 set集合的创建 Set集合的交集&并集&差集 set的集合推导式 set集合的常...

  • kotlin练习 ---- 集合练习

    kotlin练习 - 集合练习 Set集合 Set集合创建 Set集合的使用 List集合 List集合创建 Li...

  • Java—Set集合详解(HashSet/LinkedHashS

    Set集合介绍 Set集合的概念   Set集合类似于一个容器,程序把很多对象保存到Set集合中,Set集合对添加...

  • Python中集合set()的使用及处理

    在Python中集合(set)与字典(dict)比较相似,都具有无序以及元素不能重复的特点 1.创建set 创建s...

网友评论

      本文标题:L2_005集合相似度(set)

      本文链接:https://www.haomeiwen.com/subject/wykfcftx.html