首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

求1简单算法,从少量数据中找出不同

2012-08-24 
求一简单算法,从少量数据中找出不同小弟不太懂算法,请各位指教例:数据A:123,456,789,101,112数据B:789,101

求一简单算法,从少量数据中找出不同
小弟不太懂算法,请各位指教
例:
数据A:123,456,789,101,112
数据B:789,101,653,222,112
需要找出653,222
大家帮忙想个算法,谢谢了,尽量效率高的

[解决办法]
分两步完成:
1.对A,B两组数据排序,得到
数据A ':101,112,123,456,789
数据B ':101,112,222,653,789
此步骤的效率可以达到O(n*logn).
2.在数据B '中找出没有在A '中出现的数据
可以很快找到:222,653
此步骤的效率是线性的,即:O(n).

故总的效率是O(n*logn).
[解决办法]
数据很少直接2重循环就完了,数据稍大的话如一楼排序,再大的话可以用hash
[解决办法]
字符串的话,先把A串每个加一个不会有的字符合并成一个串(比如@;等)形成123@456@789@101@112@
然后在这个字符串里面分别查找789@,101@,653@,222@,112@,找不到的就是你想要的
[解决办法]
排好一组,另外一组每个元素二分查找。字符的话也可以二分,就是判断字典顺序了。另外一种方法,两组合并成一组,排序,然后遍历,看那个元素不是两个。
[解决办法]
数学中差集的概念(在第二个集合但是不在第一个集合中的数据)
熟悉STL的话,可以直接用STL 算法库中提供的差集运算,这里给出用STL算法实现的代码,供参考(Good Luck):

C/C++ code
#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;int main(){    /*    // input 2 group data by hand     vector<string> strVec1;        // store the first group data     vector<string> strVec2;        // store the second group data    string strTmp;    cout << "Please enter the 1st data(spit with space/enter, end with ctr+z):" << endl;    while(cin >> strTmp)    {        strVec1.push_back(strTmp);    }    cout << "Please enter the 2nd data(spit with space/enter, end with ctr+z):" << endl;    cin.clear();    while(cin >> strTmp)    {        strVec2.push_back(strTmp);    }    */    // for demonstration    string str1[] = {"123","456","789","101","112"};    string str2[] = {"123","456","222","653","789"};        vector<string> strVec1(str1,str1+5);        // store the first group data     vector<string> strVec2(str2,str2+5);        // store the second group data    vector<string> strVec3;        // store the result (the difference set of 1st and 2nd group data)    sort(strVec1.begin(),strVec1.end());    sort(strVec2.begin(),strVec2.end());    set_difference(strVec2.begin(), strVec2.end(), strVec1.begin(), strVec1.end(), back_inserter(strVec3));    copy(strVec3.begin(),strVec3.end(),ostream_iterator<string>(cout,"  "));    cout << endl;    getchar();    return 0;} 

热点排行