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}。除了交集点外,还有并集点、差集点、对称差集点等等。
交集点在不同领域都有着重要的应用场景。在计算机科学中,交集点被广泛用于设计算法和数据结构。例如,在搜索引擎中,如果用户搜索的关键词与数据库中的某些元素匹配,则搜索引擎将返回这些匹配元素的交集点。在面向对象编程中,交集点可以用于比较两个类的属性、方法和行为。在统计学和数据分析中,交集点可以用于比较两个数据集的相似性和差异性。因此,理解交集点的概念和应用场景非常重要,无论是从理论还是实践角度。