精华内容
下载资源
问答
  • 判断极值点是极大值还是极小值

    万次阅读 2018-10-18 14:40:49
    ①求函数的二阶导数,将极值点代入,二级导数值>0, 为极小值点,反之为极大值点 ...②判断极值点左右邻域的导数值的正负:左+右- 为极大值点,左-右+ 为极小值点,左右正负不变,不是极值点。...

    ①求函数的二阶导数,将极值点代入,二级导数值>0, 为极小值点,反之为极大值点
    二级导数值=0,有可能不是极值点;
    ②判断极值点左右邻域的导数值的正负:左+右- 为极大值点,左-右+ 为极小值点,左右正负不变,不是极值点。

    展开全文
  • 极大值抑制算法

    千次阅读 2016-09-24 22:01:07
    1. 算法原理  非极大值抑制算法(Non-maximum suppression, NMS)的本质是搜索局部极大值,... 算法流程3-5行判断当前元素是否大于其左邻与右邻元素,如符合条件,该元素即为极大值点。对于极大值点I[i],已知I

    1. 算法原理

      非极大值抑制算法(Non-maximum suppression, NMS)的本质是搜索局部极大值,抑制非极大值元素。

    2. 3邻域情况下NMS的实现

      3邻域情况下的NMS即判断一维数组I[W]的元素I[i](2<=i<=W-1)是否大于其左邻元素I[i-1]和右邻元素I[i+1],算法流程如下图所示:

      

      a. 算法流程3-5行判断当前元素是否大于其左邻与右邻元素,如符合条件,该元素即为极大值点。对于极大值点I[i],已知I[i]>I[i+1],故无需对i+1位置元素做进一步处理,直接跳至i+2位置,对应算法流程第12行。

        

      b. 若元素I[i]不满足算法流程第3行判断条件,将其右邻I[i+1]作为极大值候选,对应算法流程第7行。采用单调递增的方式向右查找,直至找到满足I[i]>I[i+1]的元素,若i<=W-1,该点即为极大值点,对应算法流程第10-11行。

        

    3. NMS在物体检测中的应用

      物体检测中应用NMS算法的主要目的是消除多余(交叉重复)的窗口,找到最佳物体检测位置。

      

      如上图所示,人脸检测中,虽然每个窗口均检测到人脸,但仅需给出一个最有可能表征人脸的窗口。

    4. 算法程序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    function pickLocate = nms(boxes, overlap)
     
    % Non-maximum suppression.
    % In object detect algorithm, select high score detections and skip windows
    % covered by a previously selected detection.
    %
    % input - boxes : object detect windows.
    %                 xMin yMin xMax yMax score.
    %         overlap : suppression threshold.
    % output - pickLocate : number of local maximum score.
     
    boxes = double(boxes);
     
    if isempty(boxes)
        pickLocate = [];
    else
        xMin = boxes(:, 1);
        yMin = boxes(:, 2);
        xMax = boxes(:, 3);
        yMax = boxes(:, 4);
         
        s = boxes(:, end);
         
        % area of every detected windows.
        area = (xMax - xMin + 1) .* (yMax - yMin + 1);
         
        % sort detected windows based on the score.
        [vals, I] = sort(s);
         
        pickLocate = [];
        while ~isempty(I)
            last length(I);
            i = I(last);
             
            pickLocate = [pickLocate; i];
            suppress = [last];
             
            for pos = 1 : last - 1
                j = I(pos); 
                 
                % covered area.
                xx1 = max(xMin(i), xMin(j));
                yy1 = max(yMin(i), yMin(j));
                xx2 = min(xMax(i), xMax(j));
                yy2 = min(yMax(i), yMax(j));
                 
                w = xx2 - xx1 + 1;
                h = yy2 - yy1 + 1;
                 
                if ((w > 0) && (h > 0))
                    % compute overlap.
                    o = w * h / min(area(i), area(j));
                     
                    if (o > overlap)
                        suppress = [suppress; pos];
                    end
                end
                 
                % xx1 = max(x1(i), x1(I(1:last-1)));
                % yy1 = max(y1(i), y1(I(1:last-1)));
                % xx2 = min(x2(i), x2(I(1:last-1)));
                % yy2 = min(y2(i), y2(I(1:last-1)));
                 
                % w = max(0.0, xx2-xx1+1);
                % h = max(0.0, yy2-yy1+1);
                 
                % inter = w.*h;
                % o = inter ./ (area(i) + area(I(1:last-1)) - inter);
                 
                % saving the windows which o less than threshold.
                % I = I(o <= overlap);
            end
            I(suppress) = [];
        end
    end
    展开全文
  • NMS——非极大值抑制

    万次阅读 多人点赞 2016-09-30 15:38:32
    NMS(non maximum suppression),中文名非极大值抑制,在很多计算机视觉任务中都有广泛应用,如:边缘检测、目标检测等。这里主要以人脸检测中的应用为例,来说明NMS,并给出Matlab和C++示例程序。 人脸检测的一些...

    NMS(non maximum suppression),中文名非极大值抑制,在很多计算机视觉任务中都有广泛应用,如:边缘检测、目标检测等。

    这里主要以人脸检测中的应用为例,来说明NMS,并给出Matlab和C++示例程序。

    人脸检测的一些概念

    (1) 绝大部分人脸检测器的核心是分类器,即给定一个尺寸固定图片,分类器判断是或者不是人脸;

    (2)将分类器进化为检测器的关键是:在原始图像上从多个尺度产生窗口,并resize到固定尺寸,然后送给分类器做判断。最常用的方法是滑动窗口。

    以下图为例,由于滑动窗口,同一个人可能有好几个框(每一个框都带有一个分类器得分)

    这里写图片描述

    而我们的目标是一个人只保留一个最优的框:

    于是我们就要用到非极大值抑制,来抑制那些冗余的框: 抑制的过程是一个迭代-遍历-消除的过程。

    (1)将所有框的得分排序,选中最高分及其对应的框:

    这里写图片描述

    (2)遍历其余的框,如果和当前最高分框的重叠面积(IOU)大于一定阈值,我们就将框删除。

    这里写图片描述

    (3)从未处理的框中继续选一个得分最高的,重复上述过程。

    这里写图片描述

    下面给出MATLAB下的快速NMS代码,并带有详细的注释:

    %% NMS:non maximum suppression
    function pick = nms(boxes,threshold,type)
    % boxes: m x 5,表示有m个框,5列分别是[x1 y1 x2 y2 score]
    % threshold: IOU阈值
    % type:IOU阈值的定义类型
    
        % 输入为空,则直接返回
        if isempty(boxes)
          pick = [];
          return;
        end
    
        % 依次取出左上角和右下角坐标以及分类器得分(置信度)
        x1 = boxes(:,1);
        y1 = boxes(:,2);
        x2 = boxes(:,3);
        y2 = boxes(:,4);
        s = boxes(:,5);
    
        % 计算每一个框的面积
        area = (x2-x1+1) .* (y2-y1+1);
    
        %将得分升序排列
        [vals, I] = sort(s);
    
        %初始化
        pick = s*0;
        counter = 1;
    
        % 循环直至所有框处理完成
        while ~isempty(I)
            last = length(I); %当前剩余框的数量
            i = I(last);%选中最后一个,即得分最高的框
            pick(counter) = i;
            counter = counter + 1;  
    
            %计算相交面积
            xx1 = max(x1(i), x1(I(1:last-1)));
            yy1 = max(y1(i), y1(I(1:last-1)));
            xx2 = min(x2(i), x2(I(1:last-1)));
            yy2 = min(y2(i), y2(I(1:last-1)));  
            w = max(0.0, xx2-xx1+1);
            h = max(0.0, yy2-yy1+1); 
            inter = w.*h;
    
            %不同定义下的IOU
            if strcmp(type,'Min')
                %重叠面积与最小框面积的比值
                o = inter ./ min(area(i),area(I(1:last-1)));
            else
                %交集/并集
                o = inter ./ (area(i) + area(I(1:last-1)) - inter);
            end
    
            %保留所有重叠面积小于阈值的框,留作下次处理
            I = I(find(o<=threshold));
        end
        pick = pick(1:(counter-1));
    end
    展开全文
  • 中国象棋项目中的极大值,极小值算法以及α-β剪枝技术技术极大值,极小值算法1. 问题提出2. 代码实现α-β剪枝优化1. 代码实现,注意和上面的代码进行比较(其实差别并不大)2. 代码分析3.其他可优化点 极大值,极...

    极大值,极小值算法

    1. 问题提出

    在中国象棋的人机对战模块的开发中,对于电脑如何选择下一步要走的棋时,首先很自然的想到要设立一个估值函数,然后暴力遍历所有可以移动的己方棋子以及每个棋子可以移动的目标位置,找到一个移动后估值函数值最大的移动方式。这里的估值函数最开始只是简单的为每颗棋子固定的设置不同的价值,然后用己方棋子价值之和减去对方棋子价值之和的最大值作为估值函数的返回值。这种方式效果很差,电脑在走的时候老是容易在原地打转,其实对比我们平常下棋就可以发现,我们在每走一步时,都会思考对方会怎么走,我们吃掉对方的一个棋子,会不会反而损失更多,总而言之,就是人会考虑多步,而我们只让电脑考虑了一步,那么就想到让电脑也考虑多步,可是要如何来实现呢?我们仔细分析一下,我们走棋(正常人下棋,不说高手)是要尽量可以吃掉对方的棋,然后让对方无法吃掉自己的棋,换句话说,就是我们选择时尽量得到最高的分,并且让对方得到尽量小的分,这就引出了极大值,极小值算法,在对方作出的所有对它自己价值大的选择中(意味着对己方价值小,或者为负)的选择中选择一个对自己价值最大的。

    2. 代码实现

    (1)需要考虑多少层
    (2)递归调用终止条件
    (3)求最大值(getMaxScore)和求最小值(getMinScore)函数中会调用getAllPossible函数,而这个函数会根据被谁调用内部会有不同的处理方式,因为求最大值相当于己方走一步棋,而求最小值相当于对方走一步棋(对于本项目,内部是根据该红棋走还是黑棋走返回对应的可能步骤)
    (4)在最顶层之上,还应该有一个函数getBestStep开始去调用getMaxScore函数,并传入初始层级(对于本项目,这个函数会返回一个表示最佳选择的step,而不是一个分数)
    (5)在本项目中,因为人走完一步后,电脑会立刻去计算它需要走的一步,如何考虑的层级较高,则会阻塞前端的渲染,解决方案为延时一点时间(使用定时器实现)再让电脑去计算(或者还可以考虑使用子线程)

    //step是代表一步棋
    int getMaxScore(int level)
    {
    	//层级为0,直接计算当前分数返回
    	if(level == 0) return calcScore();
    	vector<step*> steps;//存放所有可能的走法
    	getAllPossibleStep(steps);//获取所有可能的走法并放到steps中
    	//step * res;//保存返回值
    	int maxScore = int(1<<31);//保存最大分数
    	for(auto it = steps.begin(); it != steps.end(); it++)
    	{
    		step * cur = *it;
    		fakeMove(step);//尝试去走某一步
    		int score = getMinScore(level-1);//走完某一步后计算得分
    		unFakeMove(step);//把这一步退回来
    		if(score > maxScore)
    		{
    			maxScore = score;
    		}
    	}
    	return maxScore;
    }
    //取得最小分数函数和取得最大分数函数基本一样
    int getMinScore(int level)
    {
    	//层级为0,直接计算当前分返回
    	if(level == 0) return calcScore();
    	vector<step*> steps;//存放所有可能的走法
    	getAllPossibleStep(steps);//获取所有可能的走法并放到steps中
    	//step * res;//保存返回值
    	int minScore = int(~(1<<31));//保存最大分数
    	for(auto it = steps.begin(); it != steps.end(); it++)
    	{
    		step * cur = *it;
    		fakeMove(step);//尝试去走某一步
    		int score = getMaxScore(level-1);//走完某一步后计算得分
    		unFakeMove(step);//把这一步退回来
    		if(score < maxScore)
    		{
    			maxScore = score;
    		}
    	}
    	return minScore;
    }
    

    α-β剪枝优化

    1. 代码实现,注意和上面的代码进行比较(其实差别并不大)

    int getMaxScore(int level, int currentMin)
    {
    	//层级为0,直接计算当前分返回
    	if(level == 0) return calcScore();
    	vector<step*> steps;//存放所有可能的走法
    	getAllPossibleStep(steps);//获取所有可能的走法并放到steps中
    	//step * res;//保存返回值
    	int maxScore = int(1<<31);//保存最大分数
    	for(auto it = steps.begin(); it != steps.end(); it++)
    	{
    		step * cur = *it;
    		fakeMove(step);//尝试去走某一步
    		int score = getMinScore(level-1);//走完某一步后计算得分
    		unFakeMove(step);//把这一步退回来
    		//剪枝代码,注意等号(有没有等号对最后的选择出来的结果都是不可控的,因为处理
    		//各个情况的顺序无法控制,或者说无法确定得分相同的两种情况到底哪个好,所以
    		//使用等号反而会提高一些效率,
    		//因为我们在计算时棋子的类别并不多,这个分数很有可能相等)
    		if(score >= currentMin)
    		{
    			return score;
    		}
    		
    		if(score > maxScore)
    		{
    			maxScore = score;
    		}
    	}
    	return maxScore;
    }
    //取得最小分数函数和取得最大分数函数基本一样
    int getMinScore(int level, int currentMax)
    {
    	//层级为0,直接计算当前分返回
    	if(level == 0) return calcScore();
    	vector<step*> steps;//存放所有可能的走法
    	getAllPossibleStep(steps);//获取所有可能的走法并放到steps中
    	//step * res;//保存返回值
    	int minScore = int(~(1<<31));//保存最大分数
    	for(auto it = steps.begin(); it != steps.end(); it++)
    	{
    		step * cur = *it;
    		fakeMove(step);//尝试去走某一步
    		int score = getMaxScore(level-1);//走完某一步后计算得分
    		unFakeMove(step);//把这一步退回来
    		
    		if(score <= currentMax)
    		{
    			return socre;
    		}
    		
    		if(score < maxScore)
    		{
    			maxScore = score;
    		}
    	}
    	return minScore;
    }
    

    2. 代码分析

    相比较与未优化状态,只是多了一个参数,多了一个判断。为什么可以直接剪掉呢?
    首先,我们需要明确一点,对分数的计算是在最底那一层进行的(也就是level等与0的时候),就好比一个树的结构中的叶子节点,计算结果一层一层往上送,在送的过程中一层一层比较,未经剪枝的时候,所有的叶子节点都会被计算,然后往上送,进行比较,选出最大值或最小值继续往上送,直到递归起点,即获得所需的得分最好的走法。而剪枝剪掉的就是不必要的计算,因为这里的递归是一次到底后进行计算,然后回溯,再到底进行计算,这样的话,叶子节点的计算并没有连续进行,中间有一个回溯的过程。
    (1)在求最大值函数中调用求最小值和函数,向其中传入一个当前的最大值,在求最小值函数中,若得到下层送上来的某个分数小于传入的最大值,则可以肯定在求最小值函数中的下层递归求解过程可以被剪掉,因为求最小值函数返回的值肯定不会大于那个比传入的最大值小的值。
    (2)在求最小值函数中调用求最大值的函数,向其传入一个当前的最小值,在求最大值的函数中,若得到下层传上来的值大于传入的最小值,则可以肯定在求最大值函数中的下层递归求解过程可以被剪掉,因为要递交给上层求最小值函数一个自己的最大值,而这个最大值肯定不会小于那个比传入的最小值大的值,那么在求最小值的函数中肯定不会被使用。

    3.其他可优化点

    (1)若对当前层所有可能的情况以某种方式进行排序,使得可以更早的得到需要返回的值,那么在调用下一层时可以得到更好的剪枝效果。(具体的可以在求所有情况的函数中,遍历棋子的顺序作出调整,比如说车所有可以走的步先与兵所有可走的步放入下一步集合中,其实这个做的更细的话,应该结合估值函数来进行调整,有点像在中间层先简易的使用一下估值函数)。
    (2)对估值函数的优化,原程序中每个棋子设定固定的分值,其实在不同的局势下,棋子应该有不同的价值,对其进行调整,应该能得到更好的选择。
    (3)判断某个棋子是否可以移动到某个位置时用到的函数应该可以优化,以提高判断的效率,在获取所有可能步骤的时候,对于不同的棋子,可以确定它不能走到某个位置,那么可以直接过滤掉,而不是调用判断是否可以移动的函数,用填充的方法(而非遍历)去获取所有可能的移动步骤。

    展开全文
  • 极大值极小值搜索设计五子棋

    千次阅读 2018-07-26 11:49:30
    极大值极小值搜索设计五子棋 源代码可在这里下载 摘要: 设计一个五子棋对战AI,使用极大值极小值搜索,并使用α-β剪枝减少复杂度。采用启发式函数对整个棋局形式进行评估,并作为极大值极小值搜索的依据。 一...
  • 遗传算法求解极大值问题

    千次阅读 2018-01-01 16:20:26
    极大值问题假设有一个函数z=ysin(x)+xcos(y)z=ysin(x)+xcos(y),图形如下:这时要求这个函数在x位于[-10,10]和y位于[-10,10]之间的最大值。这时想象这是个地形图,且这个地区无规律的放置很多人,有的在谷底,有的...
  • 极大值抑制算法 (NMS)

    千次阅读 2017-06-02 21:54:38
    1. 算法原理  非极大值抑制算法(Non-maximum suppression, NMS)的本质是搜索局部... 算法流程3-5行判断当前元素是否大于其左邻与右邻元素,如符合条件,该元素即为极大值点。对于极大值点I[i],已知I[i]>I[i+1],
  • 极小值极大值算法-井字棋

    千次阅读 2015-08-24 08:56:56
    用极小值极大值算法写的井字棋: #include #include #define COM -1 #define MAN 1 #define STEP 9 #define DRAW 0 #define ROW 3 #define COL 3 #define MAX_NUM 1000; struct Move { int x; int y; }; ...
  • 初次接触到非极大值抑制算法(Non-maximum suppression, NMS)是在CNN学习过程中,当时看到R-CNN SP-NET中都用到了该方法作为最后确定目标bounding box 。常常经过图像定位算法或者深度网络学习得出的bounding box不止...
  • opencv实现简单的局部极大值求解

    千次阅读 2015-08-08 20:48:49
    前言 实现类似matlab的findpeaks功能。 ... 局部极大值求解 //src: 输入数据 //minPeakDistance: 相邻两个局部极大值的最小间距。...//minHeightDiff: kernelSize范围内极大值与极小值的最小差值。与m
  • 遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。 简而言之,遗传算法就是通过每次选择比较好的个体进入...
  •  非极大值抑制,简称为NMS算法。是一种获取局部最大值的有效方法。在3领域中,假设一个行向量的长度为w,从左向右,由第一个到第w个和其3领域中的数值进行比对。 如果某个i大于i+1并且小于i-1,则其为一个绝不...
  • yolo之---非极大值抑制

    千次阅读 2019-06-28 22:10:00
    最近在学习RCNN时看到了非极大值抑制,一开始有点不明白,在网上学习了之后记录一下。 非极大值抑制就是一个寻找局部最大值的过程。 在进行目标检测时一般会采取窗口滑动的方式,在图像上生成很多的候选框,然后把...
  • 极大值抑制(Non-Maximum-Suppression)

    万次阅读 2016-11-28 13:49:11
     非极大值抑制NMS在目标检测,定位等领域是一种被广泛使用的方法。对于目标具体位置定位过程,不管是使用sw(sliding Window)还是ss(selective search)方法,都会产生好多的候选区域。实际看到的情形就是好多区域的...
  • 极大值抑制(nms)算法详解[python]

    万次阅读 多人点赞 2019-08-22 17:29:59
    目前,常用的目标检测算法,无论是One-stage的SSD系列算法、YOLO系列算法还是Two-stage的基于RCNN系列的算法,非极大值抑制都是其中必不可少的一个组件。在现有的基于anchor的目标检测算法中,都会产生数量巨大的...
  • 极大值抑制(non-maximum suppression)的理解

    万次阅读 多人点赞 2018-06-07 15:09:31
    最近在学习RCNN时看到了非极大值抑制,一开始有点不明白,在网上学习了之后记录一下。非极大值抑制就是一个寻找局部最大值的过程。在进行目标检测时一般会采取窗口滑动的方式,在图像上生成很多的候选框,然后把这些...
  • 极大值抑制(nonMaximumSuppression)

    万次阅读 多人点赞 2016-07-29 14:49:36
     非极大值抑制,简称为NMS算法。是一种获取局部最大值的有效方法。在3领域中,假设一个行向量的长度为w,从左向右,由第一个到第w个和其3领域中的数值进行比对。如果某个i大于i+1并且小于i-1,则其为一个绝不最大值...
  • 目标检测:NMS——非极大值抑制

    千次阅读 2018-05-20 11:14:39
    NMS(non maximum suppression),中文名非极大值抑制,在很多计算机视觉任务中都有广泛应用,如:边缘检测、目标检测等。 先理解一下iou计算方式: IOU可以点击:...
  • 极大值抑制算法(NMS)及python实现

    万次阅读 2018-01-20 11:55:12
    在目标检测中,常会利用非极大值抑制算法(NMS)对生成的大量候选框进行后处理,去除冗余的候选框,得到最具代表性的结果,以加快目标检测的效率。即如下图所示,消除多余的候选框,找到最佳的bbox。 NMS...
  • 极大极小算法

    万次阅读 2013-08-24 18:32:30
    极小极大的定义 Minimax算法 又名极小化极大算法,是一种找出失败的最大可能性中的最小值的算法(即最小化对手的最大得益)。通常以递归形式来实现。 Minimax算法常用于棋类等由两方较量的游戏和程序。该算法是...
  • yolov3 NMS非极大值抑制

    千次阅读 2019-06-20 16:35:50
    极大值抑制的方法是:先假设有6个矩形框,根据分类器的类别分类概率做排序,假设从小到大属于车辆的概率 分别为A、B、C、D、E、F。 (1)从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的...
  • 极大值抑制(Non Maximum Suppression)目标检测中,NMS被用于后期的物体边界框去除中. NMS 对检测得到的全部 boxes 进行局部的最大搜索,以搜索某邻域范围内的最大值,从而滤出一部分 boxes,提升最终的检测精度.
  • NMS 非极大值抑制的原理与C++代码实现

    千次阅读 热门讨论 2018-07-06 12:05:29
    原理:对于Bounding Box的列表B及其对应的置信度S,选择具有最大score的检测框M,将其从B集合中移除并加入到最终的检测结果D中....非极大值抑制:先假设有6个候选框,根据分类器类别分类概率做排序,从小...
  • 注意:由于这里求的是极大值,而用梯度下降法得到的是极小值,因此将原函数取负值,最后得到结果时再取相反数 这个代码中还存在问题,由于用了matlab中自带的subs()函数,因此相关变量的都变成了sym类型,因此无法...
  • 给出一个不含重复元素的数组num,找出其中的峰值元素(极大值)并返回其索引(下标)值.
  • 08-2. 求矩阵的局部极大值(15)

    万次阅读 2014-08-17 20:56:22
    给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。 输入格式: 输入在第1行中给出矩阵...
  • 极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。这里不讨论通用的...
  • 对梯度幅值进行非极大值抑制

    万次阅读 2015-08-21 20:49:14
    图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个阶跃,既从一个灰度在很小的缓冲区域内急剧变化到另一个灰度相差较的灰度。图象的边缘部分集中了图象的部分信息,图象...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 201,922
精华内容 80,768
关键字:

判断极大值的方法