精华内容
下载资源
问答
  • [机器学习]基于OpenCV实现最简单的数字识别

    万次阅读 多人点赞 2013-11-13 18:43:31
    本文将基于OpenCV实现简单的数字识别。这里以游戏Angry Birds为例,通过以下几个主要步骤对其中右上的分数部分进行自动识别。

    http://blog.csdn.net/jinzhuojun/article/details/8579416

    本文将基于OpenCV实现简单的数字识别。这里以游戏Angry Birds为例,通过以下几个主要步骤对其中右上角的分数部分进行自动识别。



    1. 学习分类器

    根据训练样本,选取模型训练产生数字分类器。这里的样本可以是通用的数字样本库(如NIST等),也可以是针对应用场景而制作的专门训练样本。前者优在泛化性,后者强在准确率,当然常用做法是将这两者结合,即在通用数字库基础上做修改。另外这里由于模式并不复杂,计算量也不大,所以不对样本进行特征提取,对原始样本作简单变换后直接作为训练样本。


    具体地,首先是生成训练样本矩阵,一般样本是以二维矩阵的方式存在文件当中,现在要将它们读出来,进行适当的预处理,然后生成OpenCV能理解的数据结构。
    train_X = cvCreateMat(sample_num * class_num, size * size, CV_32FC1);
    train_Y = cvCreateMat(sample_num * class_num, 1, CV_32FC1);
    
    for(i = 0; i < class_num; i++){
    	for(j = 0; j < sample_num; j++){	
    		src_image = cvLoadImage(file,0);
    		pimage = preprocessing(src_image, size, size);
    		...
    		cvGetRow(train_X, &row, i * sample_num + j);
    		row_vec = cvReshape(&data, &mathdr, 0, 1);
    		cvCopy(row_vec, &row, NULL);
    		...
    		cvGetRow(train_Y, &row, i * sample_num + j);
    		cvSet(&row, cvRealScalar(i));
    	}
    }

    训练样本中的数字位置形态各异,因此读入时需要进行规整化。主要方法是先找到数字的边界框,然后以宽和高中大的一边为基准进行缩放和拉伸,从而使得其可以占满整个表示单个样本的矩阵。
    IplImage preprocessing(IplImage* img, int w, int h){
    	...
    	bb = findBoundingBox(img);
    	cvGetSubRect(img, &data, cvRect(bb.x, bb.y, bb.width, bb.height));
    	size = (bb.width > bb.height) ? bb.width : bb.height;
    	
    	res = cvCreateImage(cvSize(size, size), 8, 1);
    	x = floor((float)(size - bb.width) / 2.0f);
    	y = floor((float)(size - bb.height) / 2.0f);
    	cvGetSubRect(res, &subdata, cvRect((int)x, (int)y, bb.width, bb.height));
    	cvCopy(&data, &subdata, NULL);
    
    	ret = cvCreateImage(cvSize(w, h), 8, 1);
    	cvResize(res, ret, CV_INTER_NN);
    	return *ret;
    }

    假设单个样本可表示为0/1矩阵,那findBoundingBox()只要从x和y方向分别扫描最大最小的非0值就可以了。 训练样本准备好后,在OpenCV中创建相应的分类器非常方便。这里用的是KNN,当然除了KNN外还有其它很多封装好的分类器(如NN, SVM等)。
    knn = new CvKNearest(train_X, train_Y, 0, false, K);

    2. 图像预处理

    前面通过学习产生了分类器,但我们输入图像中的数字并不能直接作为测试输入。图像中的数字笔画有时并不规整,还可能相互重叠。因为本文例子为了简化用的是屏幕截图,所以位置形变校正,色彩亮度校正等等都省去了,但仍需要一些简单处理。下面先对输入图像进行一把简单的预处理,主要目的是将数字之间两两分开。方法很简单,首先将图像转成二值图,然后腐蚀一把,数字之间就分离得比较开了,这样便于我们下一步分割和识别。这样做还有个好处,就是把其余的噪声也顺带去掉了。

    cvtColor(input, out_img, CV_BGR2GRAY);
    threshold(out_img, out_img, 0, 255, CV_THRESH_OTSU + CV_THRESH_BINARY);
    ...
    erode(out_img, out_img, elem);

    结果:



    3. 图像分割

    接下来,就可以对图像进行分割了。由于我们的分类器只能对数字一个一个地识别,所以首先要把每个数字分割出来。基本思想是先用findContours()函数把基本轮廓找出来,然后通过简单验证以确认是否为数字的轮廓。对于那些通过验证的轮廓,接下去会用boundingRect()找出它们的包围盒。

    vector< vector< Point> > contours;  
    findContours(contour_img, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);   
      
    vector<vector<Point> >::iterator it = contours.begin();  
    while (it!=contours.end()) {  
        RotatedRect rect = minAreaRect(Mat(*it));  
        if(verifyRect(rect)){     
            ++it; // A valid rectangle found      
        } else {  
            it= contours.erase(it);  
        }  
    }  
      
    ...  
    vector<Rect> boundRect(contours.size());  
    for (int i = 0; i < contours.size(); ++i) {  
        Scalar color = Scalar(200, 200, 200);  
        boundRect[i] = boundingRect(Mat(contours[i]));  
        rectangle(out_img, boundRect[i].tl(), boundRect[i].br(), color, 0.2, 8, 0);  
          
        CvRect roi = CvRect(boundRect[i]);  
        IplImage orig = out_img;  
        IplImage *res = cvCreateImage(cvSize(roi.width, roi.height), orig.depth, orig.nChannels);  
        cvSetImageROI(&orig, roi);  
        cvCopy(&orig, res);  
        cvResetImageROI(&orig);  
      
        IplImage *bininv_img;  
        bininv_img = cvCreateImage(cvSize(128, 128), IPL_DEPTH_8U, 1);  
        cvResize(res, bininv_img);  
        cvThreshold(bininv_img, bininv_img, 100, 255, CV_THRESH_BINARY_INV);          
      
        int ret = do_ocr(bininv_img);  
        res_elem elem;  
        elem.num = ret;  
        elem.xpos = boundRect[i].tl().x;  
        res_vec.push_back(elem);  
        ...  
    }  

    结果:



    4. 应用分类器

    分割完后就可以应用我们前面训练好的分类器对分割结果进行识别了。当然,如果感觉结果不满意,可以将分类错误的样本加上正确的标签后放入训练样本重新生成分类器,使得分类器能够有更好的识别率。上一步中的do_ocr()函数就是利用先前训练好的分类器识别单个数字。注意训练样本进行过怎么样的预处理,这里也一样要做。

    int do_ocr(IplImage *img)
    {
    	...
    	pimage = preprocessing(img, size, size);
    	
    	...
    	cvGetSubRect(pimage, &data, cvRect(0, 0, size, size));
    	CvMat mathdr, *vec;
    	vec = cvReshape(&data, &mathdr, 0, 1);
    
    	ret = knn->find_nearest(vec, K, 0, 0, nearest, 0);
    	return (int)ret;
    }


    5. 后期处理

    因为分割图像时查找数字轮廓并不保证是按顺序来的,所以这儿要将识别结果按分割时输出的包围盒位置信息进行排序,最后将它们转换成数字输出。

    sort(res_vec.begin(), res_vec.end(), sort_func);
    int j, num = 0;
    for (j = 0; j < res_vec.size(); ++j) {
    	num = num * 10 + res_vec[j].num;
    }
    char resbuf[256];
    sprintf(resbuf, "%d", num);
    putText(show_img, resbuf, Point(OUTPUT_X, OUTPUT_Y), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(0, 255, 0), 2);
    imshow("show", show_img);

    结果:



    展开全文
  •  (左右、上下、对都算相邻)一共有多少种可能的填方案?请填写表示方案数目的整数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。思路:用全排列函数(next_permutation)找出所有...


    如下的10个格子 

    填入0~9的数字。要求:连续的两个数字不能相邻。 
    (左右、上下、对角都算相邻)

    一共有多少种可能的填数方案?

    请填写表示方案数目的整数。 
    注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

    思路:用全排列函数(next_permutation)找出所有组合,然后用绝对值函数特判连续,相邻,对角,上下,相减不为1。看到这,你这道题就已经AC了。
    答案:1580

    ACDAIMA:
    #include<iostream>
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
       int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
       int ans = 0;
       do
       {
           if((abs(a[0]-a[1])!=1)&&(abs(a[1]-a[2])!=1)&&(abs(a[3]-a[4])!=1)&&(abs(a[4]-a[5])!=1)&&
              (abs(a[5]-a[6])!=1)&&(abs(a[7]-a[8])!=1)&&(abs(a[8]-a[9])!=1)&&
              (abs(a[0]-a[4])!=1)&&(abs(a[1]-a[5])!=1)&&(abs(a[2]-a[6])!=1)&&
              (abs(a[3]-a[7])!=1)&&(abs(a[4]-a[8])!=1)&&(abs(a[5]-a[9])!=1)&&
              (abs(a[0]-a[3])!=1)&&(abs(a[0]-a[5])!=1)&&(abs(a[1]-a[4])!=1)&&
              (abs(a[1]-a[6])!=1)&&(abs(a[2]-a[5])!=1)&&(abs(a[4]-a[7])!=1)&&(abs(a[4]-a[9])!=1)&&
              (abs(a[3]-a[8])!=1)&&(abs(a[5]-a[8])!=1)&&(abs(a[6]-a[9])!=1))
                ans++;
    
       }while(next_permutation(a,a+10));
    
       cout<<ans<<endl;
    
    }
    

    展开全文
  • android 为桌面图标添加数字

    万次阅读 2018-08-15 15:14:10
    android 为桌面图标添加数字标 我的github项目 BadgeForAppIcon 看完麻烦 star 一下 在某些app的设计中,产品经理总会想当然的提出为桌面图标添加数字标的需求。作为一个开发者当然只能努力的去实现,然后你...

    android 为桌面图标添加数字角标

    我的github项目 BadgeForAppIcon
    看完麻烦 star 一下

    在某些app的设计中,产品经理总会想当然的提出为桌面图标添加数字角标的需求。作为一个开发者当然只能努力的去实现,然后你打开了百度。。。

    一、“砖”

    这种问题你会在百度上找到很多答案,拿来一块砖开心的就贴在了你的demo里,然后运气好的你拿起了你手里的huawei、sumsung,运气不好的朋友手里拿着oppo、vivo、xiaomi或其他
    “运气不好”的原因很简单,你找的“砖”在这些设备上没用。
    文章最后会吐槽一下为啥你搜到的方法不管用,下面直接给你块好用的“砖”。

    二、支持列表

    我的github项目 BadgeForAppIcon
    看完麻烦 star 一下

    手机厂商(launcher) 是否支持(Y/N) launcher package name
    HUAWEI Y com.huawei.android.launcher
    XIOAMI Y* com.miui.home
    OPPO Y*
    VIVO N*
    GOOGLE Y* com.google.android.apps.nexuslauncher
    MEIZU N
    SAMSUNG Y* com.sec.android.app.launcher

    *:有特殊情况,会在第三节中详细说明

    2.1、判断当前launcher

    这里需要注意的是,是否支持角标并不与手机厂商有关,而是你当前使用的launcher开发厂商有关。

    • 比如:你用着华为手机,却用着魅族的launcher,那肯定是不会成功的显示出桌面角标的
    • 相反的,你用着某一款手机却用着华为的launcher,一样可以显示出桌面图标角标

    获取当前launcher包名的方法

    public static String getLauncherPackageName() {
            //获取ApplicationContext
            final Context context = App.getInstance().getBaseContext();
            final Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            final ResolveInfo res = context.getPackageManager().resolveActivity(intent, 0);
            if (res.activityInfo == null) {
                // should not happen. A home is always installed.
                return null;
            }
            if (res.activityInfo.packageName.equals("android")) {
                return null;
            } else {
                return res.activityInfo.packageName;
            }
        }

    三、方法实现

    3.1、华为(荣耀)

    官方文档:https://developer.huawei.com/consumer/cn/devservice/doc/30802

        private void setHUAWEIIconBadgeNum(int count) throws Exception {
            final Context context = App.getInstance().getBaseContext();
            Bundle bunlde = new Bundle();
            bunlde.putString("package", context.getPackageName());
            bunlde.putString("class", CappUtils.getLaunchIntentForPackage());
            bunlde.putInt("badgenumber", count);
            context.getContentResolver().call(Uri.parse("content://com.huawei.android.launcher.settings/badge/"), "change_badge", null, bunlde);
        }

    3.2、小米

    官方文档:https://dev.mi.com/console/doc/detail?pId=939

        private Notification setXIAOMIIconBadgeNum(int count, Notification notification) throws Exception {
            Field field = notification.getClass().getDeclaredField("extraNotification");
            Object extraNotification = field.get(notification);
            Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class);
            method.invoke(extraNotification, count);
            return notification;
        }

    小米实现时,需要注意一下几点:

    • 必须发送notification
    • 只支持MIUI6-10(网上有针对6以下的砖,我没法验证,所以这里就不贴出来了)
    • 当APP处于前台时,数字会自动清空(因此,APP必须处于后台时才可以设置成功)

    为什么这么多限制,与我用的邮箱或那些聊天软件不一样?

    • 我会在最后一节吐槽这个事

    3.3、OPPO

    首先,官方客服和我说他们可以支持,但需要申请

    而抱歉的是截止目前我还没有得到具体的方法,因为我们还在它的申请流程中。。

    具体申请流程请去OPPO开放平台找他们的人工客服获取申请方法。

    3.4、VIVO

    客服直接说了:不支持 & 没渠道申请

    3.5、SAMSUNG

    网上的方法难得的好用,但没有找到官方的回复,大家凑活用吧

        private void setSAMSUNGIconBadgeNum(int count) throws Exception {
            final Context context = App.getInstance().getBaseContext();
            Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
            intent.putExtra("badge_count", count);
            intent.putExtra("badge_count_package_name", context.getPackageName());
            intent.putExtra("badge_count_class_name", CappUtils.getLaunchIntentForPackage());
            context.sendBroadcast(intent);
        }

    3.6、MEIZU

    不支持

    3.7、google

    Android8.0开始支持了,但没有那么理想的效果,只能在图标上显示一个
    长按这个点,能弹出一个小pop告诉你有多少消息。

        private void setGoogleIconBadgeNum(int count) throws Exception {
            final Context context = App.getInstance().getBaseContext();
            if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) {
                throw new Exception(ERROR_LAUNCHER_NOT_SUPPORT_ + "Google");
            }
            Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
            intent.putExtra("badge_count", count);
            intent.putExtra("badge_count_package_name", context.getPackageName());
            intent.putExtra("badge_count_class_name", CappUtils.getLaunchIntentForPackage()); // com.test. badge.MainActivity is your apk main activity
    
            context.sendBroadcast(intent);
        }

    四、吐槽

    4.1、

    当碰到这个问题时,我因为没找到合适的砖,就去了github,结果也差不多。

    最后没办法只能反编译某个通信软件的代码瞅瞅,它是咋干的。

    打开后看着似曾相识的代码,才发现和我从github上看的都一样。。。

    • 比如小米的方法,在反编译的源码中并不需要我在3.2中写的那么多限制,但为啥它就能开心的玩呢?因为它是*信!

    4.2、

    抱着疑问的态度我不得不和手机厂商客服联系了,我首先就找了VIVO

    客服妹子回答的比较干脆:不支持、没渠道申请

    为啥那个什么信能行?

    • 你要是有它的用户量,VIVO会主动支持你的(这句话是我自己想的)

    4.3、各厂家客服

    我确实看出来某星在中国的业务不太好了,没有人工客服渠道,发的邮件如石沉大海。。
    HUAWEI没的说,提了工单,周末也能及时回复。
    O、V两家人工都挺热情的,就是邮件有点慢
    一加的客服很热情,但因为是技术问题,所以她推荐我发邮件咨询。发邮件的结果“拒收

    展开全文
  • 离散数学总复习精华版(最全 最简单易懂)已完结

    万次阅读 多人点赞 2020-06-20 14:43:08
    很多点*层 加和 类似于上面的(4) 仍在更新 别撒花了 给我撒个赞吧点击我的头像看我的更多干货笔记吧 P10 代数系统 幂等律 最简单 直接自己*自己 =自己 一般证明结合律 一般都有要自己加一个 Z 注意一下幂等律 和...


    P1命题逻辑的基本概念

    在这里插入图片描述在这里插入图片描述
    虽然是不确定 但是可以是命题 就是无法判断真假
    在这里插入图片描述在这里插入图片描述

    • 优先级 在这里插入图片描述
    • 在这里插入图片描述

    P2命题逻辑等值演算

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    第一种方法: 真值表求
    在这里插入图片描述
    第二种 用等值演算求
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    P3命题逻辑推理理论

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    下面给出例题 后面的可以写成 前提引入 T1 2
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    下面给出反证法
    在这里插入图片描述
    在这里插入图片描述
    附加前提证明:
    在这里插入图片描述

    P4谓词逻辑

    在这里插入图片描述
    在这里插入图片描述
    二. 量词 任意与→连用 ; 存在与且连用
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    自由变元
    在这里插入图片描述
    在这里插入图片描述
    但是量词否定不一样例
    否定前移 任意或存在的量词变下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    一定是任意可以分配
    一定是存在或者可以分配
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    P5代数

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    P6二元关系

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    自反的话是任意A中的x
    反自反与之相反
    在这里插入图片描述
    只要在R里面必须都有<y,x>
    反对称相反
    在这里插入图片描述
    在R里面有他 那么必须他可传递在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    抽象集合的证明
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    !](https://img-blog.csdnimg.cn/20200611074103988.png)
    哈斯图 画法
    极大元、极小元不唯一
    最大元和最小元唯一:必须是所有元素都得小于或者大于他 下图中 f 不行
    在这里插入图片描述
    **ran(A)**是求得值域 只看{ ,y}y就可以 最后 构成集合{y1,y2}
    **dom(A)**是定义域 只看{x, }x就可以 最后 组成集合{x1,x2}
    在这里插入图片描述

    P7图

    n阶完全图Kn : 边数 n(n-1)/2 每个顶点之间都有边
    简单图 : 只要没有环平行边就可以
    生成子图 : 只要点同 边不一定一样
    同构 : 点同 边 经过拉伸 可以变换为一样
    生成树 就像化学里面的求同分异构体
    在这里插入图片描述

    在这里插入图片描述
    平行边必须起点和终点都相同
    出度d+ 入度d- 一个点的度数d=d+ + d-;
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    例题
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    回路:是看对角线的的加和(环: 自己到自己)
    A^n= 里面的数就是通路的条数
    Vm,vn的通路 看 矩阵里面(m,n)的元素
    可达不可达是看A^n里面是不是零,不是零写1 若为零再看之前的矩阵相同位置的元素是否有非零,若有一个为非零,则为1
    最后A^n只有全为1,可达

    **在这里插入图片描述

    P8欧拉图 哈密顿图

    **
    在这里插入图片描述
    首先欧拉图是**无向图**
    在这里插入图片描述
    哈密顿图例题
    在这里插入图片描述
    DJ斯特拉算法 求 最短路径问题
    在这里插入图片描述
    在这里插入图片描述
    例:在这里插入图片描述
    二部图: 任意一条边的两个端点一个属于V1 另一个属于V2 则G为二部图
    且V1 V2中
    每一个顶点****只有一条边
    关联

    平面图:除了顶点处 没有边交叉出现
    边界: 围成回路的
    面R的次数: 边的长度
    面:****边将平面分成的若干个区域****
    性质:
    1 平面图所有面的次数和等于边数的二倍
    2 n阶简单平面图是极大平面图 当且仅当他是联通的 且每个面的次数都为3
    3 n-m+r=2 (n为顶点数 m为边数 r为面数) 适用于任意连通平面图
    4 m<= l(n-2)/l-2 ** 适用任意连通平面图**** I 为每个面的次数
    4 n-m+r=p+1 适用于 任意p个连通分支非联通的平面图
    5 m<=l(n-p-1)/l-2 适用于 p个连通分支****的平面图

    P9 树

    在这里插入图片描述
    在这里插入图片描述
    那么什么是森林呢 ? 别急
    在这里插入图片描述

    结点数目等于边数+1
    在这里插入图片描述
    在这里插入图片描述
    另一种题型 求最小生成树
    在这里插入图片描述
    1 找出所有点 并且在一旁 写出所有的边上的数(有小到大排列)
    2 从最小数开始画边 只要
    不出现回路
    就 **画边

    在这里插入图片描述
    在这里插入图片描述
    注意 内点出度大于0
    顶点的层数 根顶点的的层数为0

    在这里插入图片描述

    腚理:
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    权? 很多点*层数 类似于上面的(4)

    在这里插入图片描述
    在这里插入图片描述
    仍在更新
    别撒花了 给我撒个赞点击我的头像看我的更多干货笔记
    在这里插入图片描述

    P10 代数系统

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    幂等律 最简单 直接自己*自己 =自己
    一般证明结合律 一般都有要自己加一个 Z
    注意一下幂等律 和吸收率
    还有一种给图 看满足什么的?
    在这里插入图片描述
    在这里插入图片描述

    主对角线上的元素排列左边的排列 满足幂等律
    延主对角线 对称 那么 满足交换律
    在这里插入图片描述
    零元那一行 那一列 都是 ai
    在这里插入图片描述
    如果满足这个 那么 ai aj互为逆元

    半群 设<S,>是一个代数系统,如运算“”封闭的,可结合的,则此二元代数系统是一个半群,若运算”*“又是可交换的,则称此代数系统可交换半

    独异点 设<S,*>是一个独异点,对任意a,b∈S a,b\in Sa,b∈S,且a,b均有逆元

    群: 注:群中不可能有零元

    给定一个代数系统<G,>,若运算满足:

    封闭结合,存在幺元任意一个集合中的元素都有逆元

    则称<G,*>是一个群,简称G是一个群

    群G的阶
    使得x ^k=e 成立的最小的正整数k 称作x的

    同态

    子群判定定理
    设G为群,H为G的非空子集,如对任意 x,y属于H 都有xy^-1属于H, 则H为G的子群

    由元素x生成的子群

    记作**** 满足H={x^k | k属于Z }

    同态
    设A=<S, , Δ, k>和A’=<S’, ’, Δ’, k’>是两个具有相同构成的代数系统,f是从S到S’的一个映射,且对任意a,b∈S满足:
    **f(a
    b) = f(a) ’ f(b)

    则称f为由A到A’的一个同态映射,简称同态。A同态于A’,记作A~A’。

    单一同态:若f是单射的,则称f为由A到A’的一个单一同态。显然,A在单一同态f下的同态象<f(S), *’, Δ’, k’>与A同构。
    同构:若f是双射的,则称f为由A到A’的一个同构映射,简称同构。A同构于A’,记作A\congA’。

    完结 撒花
    看完领会了不上60分 那就给我*"“邮寄”"*一个老八蜜汁汉堡发我邮箱 root121toor@gmail.com

    期末必考题型解析例题
    在这里插入图片描述
    入度等于出度 为n阶无向简单图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    也没有否在最前面

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    答案为在这里插入图片描述
    在这里插入图片描述
    元素只是属于 {1,2,3} 对于A来说就是元素

    但是 {{1,2,3}} 对于A来说就是 子集

    幂集P(A) 就是讲集合内的元素 外面套上{ } 在加上空集

    n阶完全图Kn : 边数 n(n-1)/2 每个顶点之间都有边
    简单图 : 只要没有环平行边就可以
    生成子图 : 只要点同 边不一定一样
    同构 : 点同 边 经过拉伸 可以变换为一样
    生成树 就像化学里面的求同分异构体
    在这里插入图片描述
    求 邻接矩阵
    在这里插入图片描述
    最小生成树
    在这里插入图片描述
    注意 可以不用一个个的连着画 可以跳着画 但是要从小到大
    在这里插入图片描述在这里插入图片描述
    注意 A的n****次方 代表长度为 n
    vi~vj代表 **(i,j)**的值

    展开全文
  • 两个数字互换位置的最简单办法

    千次阅读 2009-03-11 17:50:06
    a=1 ,b=2 a=a^b; b=a^b; a=a^b;   异或运算符^,只有当比较的位不相同时是1,其他是0
  • 对于很多软件,需要将数字变成文本,才能导入到该系统当中。在excel当中,如果数字是以文本的形式存储,在左上是带有绿色的三角形标志的。如果对于大批量数据,操作方法如下:1...经过测试,这种方法最简单方便。...
  • 论文参考文献批量改为上标,简单好用!!!

    万次阅读 多人点赞 2018-11-02 10:07:13
    交叉引用的作用大家应该都清楚(不清楚百度一下),但是写完之后才发现参考文献的引用标号需要上标格式。网上搜索发现好多方法,基本都是使用下边这种通配符 \[*\] ,但是里边的*是代表所有字符的,经常会把...
  • 在python二级考试中,有要求绘画简单图形的编程题。 以下分享一些简单图形的绘制代码 绘制边长为100的正方形, import turtle d = 0 for i in range(4): #图形边 turtle.fd(200) #边长 d = d+90 #旋转角度 ...
  • Android 实现圆角按钮(selector和shape的简单用法)

    万次阅读 多人点赞 2016-03-02 22:00:26
    首先扯点别的:这两天一直浑浑噩噩的,不知道干啥...1. 进入正题,今天简单的演示一下Android中如何实现圆角按钮。使用了selector和shape.先看效果吧,感觉效果不是你想要的,果断pass掉。1 xml布局的第一个,就是一个
  • 最简单的顺时针打印矩阵算法

    千次阅读 2018-08-27 08:11:40
    对于一个矩阵,请设计一个算法从左上(mat[0][0])开始,顺时针打印矩阵元素。 给定int矩阵mat[][],以及它的维 n 和 m,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。 测试样例: 参数:[[1, 2], [3,...
  • 基于opencv的简单图像轮廓形状识别**(全网最简单最少代码)!!!** 可以直接跳到最后整体代码看一看是不是很少的代码!!!! 思路: 1. 数据的整合 2. 图片的灰度转化 3. 图片的二值转化 4. 图片的轮廓识别 5. ...
  • 最好的 harris 点讲解

    千次阅读 2016-03-29 21:30:01
    也不说那么多废话了,要介绍啥背景意义之类的,点检测,顾名思义,就是检测点,最简单的就是两条线的交点了,还有比如下国际象棋的棋盘格子的交点之类的,反正就是检测这些点。 简单将Harris点检测算法的思想...
  • 【0基础】最简单的英灵神殿/Valheim服务器搭建实战教学 本文为所有英灵圣殿玩家提供一个最简单的服务器搭建教程,完美解决联机卡顿问题。最大程度上简化您需要亲手完成的操作。 步骤 步骤不多,但是需要您的仔细阅读...
  • Java杨辉三角最简单的实现方式

    千次阅读 多人点赞 2019-05-10 20:12:28
    杨辉三角形由数字进行排列,可以把它看作是一个数字表,其基本特性是两侧数值均为 1,其他位置的数值是其左上方数值与右上数值之和。打印杨辉三角形时需要使用到 for 循环语句。 打印杨辉三角形的 实现思路 是:...
  • 幻方,就是一个N*N的矩阵中填入1至N^2,使得每行、每列,以及两条对线上的之和都相等。当N为奇数时,可用以下的方法来填。 (1)将1填入第一行的中间; (2)将数字下一个填在右上方。  (i)出现越界。若...
  •  遇到这种需求,经验不是很丰富的开发者,会想到写一个相对布局,然后在相对布局,让购物车图片match_parent整个控件,让后在右上放一个textview, 设置背景,并更改他的值就可以,  但是这样做,可以基本实现功能需求,...
  • 安卓开发:标显示未读消息

    千次阅读 2017-03-22 11:25:54
    在网上找了有好多BadgeView这样的控件,可以实现各式各样效果,但是我又不想要那么多主题,就自己写了一个,很简单的控件首先上布局文件,很简单,就是几个布局嵌套,位置自由控制 <merge xmlns:android="http://sch
  • 题目描述 编写一个拥有三个参数(m, n, p) 的程序:并生成一个m行n列的布尔类型数组,依据...然后,使用邻近(上、下、左、右及对线)地雷的数量来 替换安全格的句号并打印结果。 代码: import random def mines...
  • 第三章 最简单的C程序设计–顺序程序结构的习题结构 经过前两章的练习现在可以由浅入深的学习C语言程序,总结了一些比较经典的题型,希望对学习C语言有些帮助 例1:将华氏温度转换为摄氏温度和绝对温度 ...
  • 从圆角到圆角

    万次阅读 2020-10-30 21:22:12
    形成了一层层更加连续的多度,从外侧的圆角开始一直等距递进到电话图标,如果去仔细核算,这个角落可以出至少 7 条等距圆角曲线。 到处都是圆角。 早期的计算机采用的是 CRT 显示器,而 CRT 显示器是用真空玻璃...
  • 知识点 1、给控件添加提醒标签,类似右上的消息提醒; 首先,给用户提醒一个类似你有多少条未读消息或者是购物车里头一共有多少物品,在底部的tab,是一个很...现在我们有一个很简单的做法,我们可以自定义控件啊,
  • 在开发项目的时候,我们经常会有...今天给大家介绍一下下边这个漂亮的 页面右上咆哮提示效果 的实现,效果图如下: 1)效果采用bootstrap-growl插件,在使用的时候需要引入对应的对应的CSS和JS: 2)我
  • 矩阵

    千次阅读 2018-03-26 11:18:58
    矩阵可以认为是矩阵中最简单的一种,值得一提的是:对线上的元素可以为 0 或其他值,对线上元素相等的对矩阵称为数量矩阵;对线上元素全为1的对矩阵称为单位矩阵。对矩阵的运算包括和、差运算、乘...
  • 八皇后问题(最简单的递归解法)

    千次阅读 多人点赞 2015-08-27 15:24:24
    副对线方向满足, 行之差等于列之差的相反:r-j==c[j]-c[r]。 只有满足了当前皇后和前面所有的皇后都不会互相攻击的时候,才能进入下一级递归。 代码如下: #include using namespace std; ...
  • 琐,下面记录一个亲身试过的超简单方法。 问题:由于MBR已经被linux系统接管,双系统卸载Linux的主要问题是当在windows中将 linux 分区直接格式化之 后,Grub系统引导程序也会被同时删除,所以导致重启后无法进入...
  • 以下是自己编写的一简单mbr.S引导程序 ;------------------------------------------------------------ SECTION MBR vstart=0x7c00 mov ax,cs mov ds,ax mov es,ax mov ss,ax mov fs,ax mov sp,0x7c...
  • Excel数字小写金额转换汉字大写金额公式的简单设置  华能呼伦贝尔能源有限公司 卞学敏 Excel数字小写金额转换汉字大写金额公式在会计工作中是经常应用到的,它能提高工作效率和会计数据的准确性。 网上有很多...
  • 得到两个的平均,输入是两个参数 # def avg(x, y)表示为可重用函数,Python不会让明确这是什么类型的变量,函数定义需要缩进。 # 最后告诉机器返回了什么值。最后使用avg(3,4)进行调用。/ 2.0保证了坚持使用小数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 211,393
精华内容 84,557
关键字:

怎样数角最简单