首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 求教:算法问题
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chenwei9120
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-19 09:59:46 楼主
    如何在连个超大的数组中找出两个数组中相同的部分
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dlyme
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 5

    发表于:2008-08-19 10:30:591楼 得分:0
    两个数组混在一起排序,重复的数据全都暴露出来了。
    如果数组很大,可以先分段,比如1~10000算一段,10001~20000算一段...,同一段中的数据再来找重复。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sjkof
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 12:46:492楼 得分:0
    引用 1 楼 dlyme 的回复:
    两个数组混在一起排序,重复的数据全都暴露出来了。
    如果数组很大,可以先分段,比如1~10000算一段,10001~20000算一段...,同一段中的数据再来找重复。


    分段前排序吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sefule
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 12:54:263楼 得分:0
    如果数组1:112255
        数组2:1225
    不知道是怎么算呢?

    如果没有重复则:
    两个数组先后插入第三方结构,而第三方则可以使用map映射等来提高查询速度.后一个插入的就会很容易知道是否重复了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gks_cn
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-02 22:40:474楼 得分:0
    可以考虑把两个数组存入到数据库的两张表中再用

    select * from a,b where a....=b....
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lizhaohu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-02 23:15:065楼 得分:0
    与求最长公共子序列相同。

    //#include <stdio.h>
    #include <iostream.h>
    #include <string.h>
    int lcs_length(char x[], char y[]);
    int main()
    {
    char x[10000],y[10000];
    int len;
    cin>>x;
    cin>>y;
    //scanf("%s%s",x,y);

    len=lcs_length(x,y);
    //printf("%d\n",len);
    cout < <len < <endl;

    return 0;
    }
    int lcs_length(char x[], char y[] )
    {
    int m,n,i,j,l[100][100];
    m=strlen(x);
    n=strlen(y);
    for(i=0;i <m+1;i++)
    l[i][0]=0;
    for(j=0;j <n+1;j++)
    l[0][j]=0;
    for(i=1;i <=m;i++)
    for(j=1;j <=n;j++)
    if(x[i-1]==y[j-1])    //i,j从1开始,但字符串是从0开始
    l[i][j]=l[i-1][j-1]+1;
    else if(l[i][j-1]>l[i-1][j])
    l[i][j]=l[i][j-1];
    else
    l[i][j]=l[i-1][j];
    return l[m][n];
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • loveyou_99
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-03 00:11:436楼 得分:0
    就是求最长公共子串,用后缀树或后缀数组可以做到O(n)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • test4ever
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-03 11:57:517楼 得分:0
    相同的部分?需要连续么?

    使用STL的Map

    先将其中一个大型数组存放在Map中,另一个数组往里面添加,如果插入失败,说明重复
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • test4ever
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-03 12:08:118楼 得分:0
    补充下 本质是红黑树
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved