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}。除了交集點外,還有並集點、差集點、對稱差集點等等。
交集點在不同領域都有著重要的應用場景。在計算機科學中,交集點被廣泛用於設計演算法和數據結構。例如,在搜索引擎中,如果用戶搜索的關鍵詞與資料庫中的某些元素匹配,則搜索引擎將返回這些匹配元素的交集點。在面向對象編程中,交集點可以用於比較兩個類的屬性、方法和行為。在統計學和數據分析中,交集點可以用於比較兩個數據集的相似性和差異性。因此,理解交集點的概念和應用場景非常重要,無論是從理論還是實踐角度。