导航:首页 > 源码编译 > 怎么用算法实现求交集

怎么用算法实现求交集

发布时间:2024-09-24 15:55:18

1. 数据结构算法 两线性表A,B求交集。。。请高手指点!!!

将A与B分别排序,然后求交。
例如:将A与B按升序排列,设A表头为P,B表头为Q,若A[P]>B[Q]那么Q++,若A[P]<B[Q]那么P++;如果A[P]=B[Q],Q++、P++,Count++,And[Count]=B[Q-1];当P或者Q其中一个达到了A或者B的表尾 算法结束。

以下是参考程序:
//----------------------------------------

#include <stdio.h>

int A[100001],B[100001];
int Ans[100001],Count,N,M;

void Swap(int &a,int &b)
{
int Temp=a;
a=b;
b=Temp;
}

void Sort(int L,int R,int A[])
{
int p,q,Mid;
if (L==R) return ;
Mid=A[(L+R)/2];
p=L-1;q=R+1;
do
{
p++;q--;
while (A[p]<Mid) p++;
while (A[q]>Mid) q--;
if (p<q) Swap(A[p],A[q]);
}while (p<q);
Sort(L,q,A);
Sort(q+1,R,A);
}

void Init()
{
int p,q;
p=q=1;
for (int i=2;i<=N;i++)
{
if (A[i]!=A[p])
{
p++;
A[p]=A[i];
}
}
for (int i=2;i<=M;i++)
{
if (A[i]!=B[q])
{
q++;
B[q]=A[i];
}
}

}

int main(void)
{
int p,q;
scanf("%d %d",&N,&M);//输入两个集合的元素的个数
for (int i=1;i<=N;i++)
scanf("%d",&A[i]);// 读取A集合
for (int i=1;i<=M;i++)
scanf("%d",&B[i]);//读取B集合
Sort(1,N,A);//A集合排序
Sort(1,M,B);//B集合排序
Init();//剔除同一集合的相同元素
p=q=1;
Count=0;
while (p<=N&&q<=M)//求解.
{
if (A[p]<B[q])
{
p++;
continue;
}
if (A[p]>B[q])
{
q++;
continue;
}
if (A[p]==B[q])
{
p++;q++;
Count++;
Ans[Count]=B[q-1];
continue;
}
}
for (int i=1;i<=Count;i++)
printf("%d ",Ans[i]);
return 0;
}

2. 求C语言描述的,用线性表的,求交集的算法

先排序两个先行表,然后去除重复项。
从一个表(a)第一项开始,为关键字扫描另一个表(b),找一个与其相等的,如果找到,那么在b表之前的项也不会是a表中的项了,然后从a表下一项作关键字,从b表被匹配的元素的下一项开始继续搜索,如果没有找到与a中第一项相等的,到遇到比该项大的项时,便从a中下一项开始,重复以上步骤。

排序就不说了,好多种,冒泡,快排,插入,二分插入都行。去除重复项,可以用以下算法
void StripRepeatElement(int Array[],int Arraylen)
{
int Count = 0;//重复计数器
int i;

for(i = 0;i < ArrayLen;i++)
{
if(Array[i] == Array[i + 1])
{
Count++;
}
else
{
Array[i - Count] = Array[i];
}
}
}
复杂度为O(n)
以下为求交集的算法,假设两个表都已经排过序和剔出重复项了
void GetIntersection(int A[],int Alen,int B[],int Blen)
{
int i = 0,j = 0;

while(i < Alen)
{
while(j < Blen)
{
if(A[i] == B[j])
{
//交集
printf(" %d ",A[i]);
j++;
break;
}
else if(A[i] < B[j])
{
//从A的下一项开始匹配
break;
}
else
{
//比较B的下一项
j++;
}
}
i++;
}
}
复杂度也为O(n)

3. 交集点是什么意思

“交集点”是一个数学术语,指的是两个或多个不同数集之间的公共元素。换句话说,如果有两个数集A和B,那么交集点就是A和B中都存在的元素。例如,如果A={1,2,3},B={2,3,4},则A和B的交集点就是{2,3}。交集点在数学和计算机科学中有广泛的应用,包括集合操作、面向对象编程和算法设计等领域。
计算两个数集的交集点可以使用不同的方法,但最常见的方法是使用集合运算符。集合运算符可以用来组合、比较和操作集合。例如,交集运算符“∩”可以用来计算两个数集的交集点。例如,如果A={1,2,3},B={2,3,4},则A∩B={2,3}。除了交集点外,还有并集点、差集点、对称差集点等等。
交集点在不同领域都有着重要的应用场景。在计算机科学中,交集点被广泛用于设计算法和数据结构。例如,在搜索引擎中,如果用户搜索的关键词与数据库中的某些元素匹配,则搜索引擎将返回这些匹配元素的交集点。在面向对象编程中,交集点可以用于比较两个类的属性、方法和行为。在统计学和数据分析中,交集点可以用于比较两个数据集的相似性和差异性。因此,理解交集点的概念和应用场景非常重要,无论是从理论还是实践角度。

阅读全文

与怎么用算法实现求交集相关的资料

热点内容
安卓如何让充电快起来 浏览:16
手机qqdisk文件夹 浏览:935
文件夹怎么放进U盘 浏览:293
手机系统编译语言 浏览:422
华为手机nfc加密卡怎么复制 浏览:19
androidjni开发流程 浏览:881
如何解除vivo应用加密锁 浏览:732
菜单创建文件夹方法 浏览:376
o型密封圈压缩率 浏览:452
lpilinux认证 浏览:205
编译文法原理是什么 浏览:16
python基础教程源代码 浏览:521
编程两个圈是什么 浏览:433
程序员掉头发怎么办 浏览:317
csgo电脑命令 浏览:590
pop和smtp服务器地址 浏览:524
使用境外服务器有什么好处和弊端 浏览:314
如何教育孩子有礼貌的app 浏览:46
如何下载得力app 浏览:900
安卓如何切换分屏 浏览:529