1.代数系统:非空集合S和S上k个一元或二元运算f1,f2,...fk组成的系统的代数系统。记作<S,f1,f2,...,fk>。
2.二元运算:设S为集合,函数f:S×S->S称为S上的二元运算。
性质:
A:若对∀x,y∈S有x*y=y*x,则称运算在S上满足交换律。
B:若对∀x,y,z∈S有(x*y)*z=x*(y*z)则称运算在S上满足结合律。
C:若对∀x∈S有x*x=x则称运算在S上满足幂等律。
3.运算特异元素的性质
A.单位元:若存在el(或er)∈S,使得∀x∈S都有el*x=x(或x*er=x)则称el(或er)是S中关于*运算的左单位元(或右单位元),若e∈S关于*运算既是左单位元又是右单位元,则称e为S上关于*运算的单位元(幺元)。
B.零元:若存在ol(或or)∈S,使得∀x∈S都有ol*x=ol(或x*or=or)则称ol(或or)是S中关于*运算的左零元(或右零元),若o∈S关于*运算既是左零元又是右零元,则称o为S上关于*运算的零元。
C.逆元:令e为S中关于运算*的单位元,对于x∈S,若存在yl(或yr)∈S,使得yl*x=e(或x*yr=e)则称yl(或yr)是S中关于*运算的左逆元(或右逆元),若y∈S关于*运算既是左逆元又是右逆元,则称y为S上关于*运算的逆元。
4.半群(semi-group):设V=<S,*>为代数系统,*为二元运算,如果*运算是可结合的,则称V为半群。
5.含幺半群(独异点)(monoid),若e∈S是关于*运算的单位元,则称V为含幺半群。有时亦记作<S,*,e>。
6.群:设<G,*>是代数系统,*是二元运算。如果*运算是可结合的,存在单位元e∈G,并且对G中的任何元素x都有x-1∈G。
给出一个代数系统<G,*>,G={1,2,...n}
#include <iostream>
using namespace std;
int jiehe(int n, char g[100][100])//判断结合律
{
int i,j,k;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
if(g[g[i][j]-'a'][k]!=g[i][g[j][k]-'a'])
{
return 0;
}
}
}
}
return 1;
}
int zuoyao(int n,char g[100][100],char a[100])//判断左单位元
{
int i,j,k,s=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(g[i][j]=a[i])
{
s++;
}
}
if(s==n)
{
return 1;
}
}
}
int youyao(int n,char g[100][100],char a[100])//判断右单位元
{
int i,j,k,s=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(g[j][i]==a[i])
{
s++;
}
}
}
if(s==n)
{
return 1;
}
}
int niyuan(int n ,char g[100][100],char a[100])//判断逆元
{
int i,j,k,s=0;
char e;
for(i=0;i<n;i++)
{
for(j = 0;j<n;j++)
{
if(g[i][j]==a[j])
{
s++;
}
}
if(s==n)
{
e=a[i];
break;
}
}
s=0;
int c=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(g[i][j]==e)
{
s++;
}
}
if(s==n)
{
c++;
}
}
if(c==n)
{
return 0;
}
}
int main()
{
char g[100][100];
char a[100];
int i,j,k;
int n;
cout<<"输入元素个数:"<<endl;
cin>>n;
cout<<"输入元素:" <<endl;
for(i=0;i<n;i++)
{
cin>>a[i];
}
cout<<"输入代数系统的运算表:" <<endl;
cout<<"*" ;
for(i=0;i<n;i++)
{
cout<<" "<<a[i] ;
}
cout<<endl;
for(i=0;i<n;i++)
{
cout<<a[i]<<" ";
for(j=0;j<n;j++)
{
cin>>g[i][j];
}
}
int s=0;
int c=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n; k++)
{
if(g[i][j]==a[k])
{
s++;
}
}
}
}
if(s==n*n&&jiehe(n,g))
{
cout<<"是半群"<<endl;
if(zuoyao(n,g,a)&&youyao(n,g,a))
{
cout<<"是幺半群"<<endl;
if(niyuan(n,g,a))
{
cout<<"是群"<<endl;
}
}
}
}