你听说过摩尔投票法吗

力扣刷题篇——摩尔投票算法 阅读详情

前言

前几天在刷力扣题目时,看官方题解发现的算法,我感觉这个算法非常有意思,是一个很好的思维开拓,因此我整理摩尔投票算法的一些知识,分享给大家。

摩尔投票法

博耶-摩尔多数投票算法( Boyer–Moore majority vote algorithm ),中文常作多数投票算法、摩尔投票算法等,是一种用来寻找一组元素中占多数元素的常数空间级时间复杂度算法。

算法思想

在集合中寻找可能存在的多数元素,这一元素在输入的序列重复出现并占到了序列元素的一半以上;在第一遍遍历之后应该再进行一个遍历以统计第一次算法遍历的结果出现次数,确定其是否为众数;如果一个序列中没有占到多数的元素,那么第一次的结果就可能是无效的随机元素。

过程可以分为两个阶段:

  • 投票阶段: 即投票人之间票数进行抵消
  • 计数阶段: 计算对抗结果中最后剩下的那个候选人票数是否有效。

举个栗子

上面的文字属实有几分枯燥无味,下面咱们来举一个有趣的栗子:

斯巴达勇士们经过了无数年的奋斗,成立了斯巴达共和国,走上了社会主义道路。

今天是斯巴达第一届人民代表大会,会议将通过全民选举的方式选出第一届共和国主席。为了保证主席的权威性,只有得票数过半才能成为新共和国的领袖。

但现在斯巴达几百万人口,统计选票是个大问题啊。而且我斯巴达勇士勇猛无敌,岂能浪费在算数上。会议组织人绞尽脑汁,终于想出了一个绝妙的点子,不仅可以选出共和国领袖,也可以展现斯巴达共和国的勇武。

规则是这样的:

  1. 如果两个勇士选举意见不合,就去场外打一架,投票阶段就不要回来了。所有选举意见不合的都去激情对撞了,剩下的斯巴达勇士(可能有多个)意见肯定统一,他们的选举对象有可能就是最后的主席。
  2. 但如果光靠剩下的人判断领袖是存在漏洞的,例如 [1,2,2,1,3,3] 这种,前面两个候选人选票互相内耗了,第三个候选人也没有达到总票数的一般,因此还需要计数阶段,统计一下最后所剩候选人的票数是否达到总票数的一半。

图文讲解

看完阿包举的例子如果还不懂,咱们再来看个图文的。

思路

根据上面的算法思想,我们将当前票数最多的候选人与获得的票数(抵消后)分别存储在 major 和 count 中。

当我们遍历下一个选票时,判断当前 count 是否为零:

  • 如果 count == 0 : 代表 major 空缺,直接将当前候选人赋值给 major,并将 count ++
  • 若 count != 0 : 代表当前 major 的票数未被完全抵消,令 count --,不同意见的斯巴达勇士去激情对撞。

初始值 count = 0, major = -1

详细图解
以 [2,2,1,3,1,2,2] 为例。

遍历数组第一个元素 2,因 count == 0,所以将 2 赋值给 major,且票数 count = 1

在这里插入图片描述

第二个数组元素依旧是候选人 2,得票数 count ++

在这里插入图片描述

第三个元素是 1,与 major 冲突,因此发生激情对撞,当前 major 的票数抵消 1 票。

在这里插入图片描述

第四个元素是 3, 与 major 冲突,产生激情对撞,当前 major 的票数抵消一票。

在这里插入图片描述

当遍历到第五个元素 1 时,此时 count = 0,说明 marjor 位置空缺,所以令 majro = 1,且 count = 1

在这里插入图片描述

第六个元素是 2,与 major 冲突,产生激情对撞,当前 major 的票数抵消 1 票,此时 count 又变为 0

在这里插入图片描述

遍历最后一个元素 2,当前 count = 0,说明 marjor 位置空缺,所以令 majro = 1,且 count = 1

在这里插入图片描述

遍历完毕,2 元素很有可能就是斯巴达新的领袖。

计数阶段: 统计 2 元素出现的次数是否大于一半,2 出现四次,大于一半,所以我宣布斯巴达共和国未来的领袖就是 2 了(怎么听起来怪怪的。。。)

真题实战

真题一:主要元素

题目来源: 面试题 17.10. 主要元素

题目描述:数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。

如果没有最后一句要求,肯定咱们大脑中第一瞬间想到的就是哈希表,使用哈希表存储每个元素的出现次数。

但是咱们现在可不是凡人啊,连斯巴达共和国的领袖都可以选举出来了,肯定要上摩尔选举法啊。

这个题的思想与我举得图文讲解极度类似,我就不多做赘述了。

/**
 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function(nums) {
    let major = -1;
    let count = 0;
    for (var i = 0; i<nums.length; i++) {
        if (count === 0) {
            major = nums[i];
        }
        if (nums[i] === major) {
            count++;
        } else {
            // 票数抵消
            count--;
        }
    }
    count = 0;
    const length = nums.length;
    // 计数阶段
    for (var i = 0; i<nums.length; i++) {
        if (nums[i] === major) {
            count++;
        }
    }
    return count * 2 > length ? major : -1;
};

真题二:求众数 II

题目来源: 229. 求众数 II

题目描述:给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。

我当时刷这道题时苦思冥想,咋都想不出空间复杂度为 O(1)的解决方案,看官方题解醍醐灌顶,这也能摩尔投票法。咱们来一起分析一下:

做这个题之前,首先要理解:出现超过 ⌊ n/3 ⌋ 次的元素最多有 2 个。咱们可以稍微反证一下:如果出现了 2 个以上超过 ⌊ n/3 ⌋ 次的元素,例如 3 个,哪意味着当前数组中会存在 3 * ⌊ n/3 ⌋ > n,与现实冲突。

思路

我把这个题形象一下,其实就相当于斯巴达勇士们要选正副领袖,所以现在两个不同意见得勇士打架就不合理了,因为这两个勇士的候选人可能是正副领袖。

既然是要选两个领袖,那是不是也可以类比为三个不同意见得勇士打架抵消那,下面我们来具体操作一下,看看能不能实现:

如果数组中只有一个元素 x 超过了 ⌊ n/3 ⌋,把数组分为两部分:一部分为 k 个 x,另一部分为 (n-k)/3 组三个不同的元素,如果三个不同元素会被抵消,最终只会剩下 k 个 x。

如果数组中有两个元素 x,y 超过了 ⌊ n/3 ⌋,把数组分为三部分:第一部分为 k 个 x,第二部分为 l 个 y,第三部分为 (n-k-l) / 3 组三个不同的元素,如果三个不同元素会被抵消,最终会剩下 k 个 x 和 l 个 y。

通过上面得分析,三个不同意见的勇士相抵消是可以实现的,算法流程为:

  • 检查当前元素是否为第一个选中的元素或第二个选中的元素。如果存在相同,对应元素得票数加一。
  • 如果与两个元素都不相同,则三个不同得元素抵消一次
  • 抵消结束后,若存在最终选票大于 0 得元素,进行计数阶段,检查该元素次数是否大于 ⌊ n/3 ⌋

上代码:

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var majorityElement = function(nums) {
    let major1 = 0,
        major2 = 0,
        count1 = 0,
        count2 = 0;
    const length = nums.length;
    // 投票抵消阶段
    for (let i = 0; i<length; i++) {
        if (count1 > 0 && major1 === nums[i]) {
            count1 ++;
        }else if (count2 > 0 && major2 === nums[i]) {
            count2 ++;
        }else if (count1 === 0) {
            count1 ++;
            major1 = nums[i];
        }else if (count2 === 0) {
            count2 ++;
            major2 = nums[i];
        }else {
            count1 --;
            count2 --;
        }
    }
    // 计数阶段
    let cnt1 = 0, cnt2 = 0, res = [];
    for (let i = 0; i<length; i++) {
        if (count1 > 0 && major1 === nums[i]) {
            cnt1 ++;
        }
        if (count2 > 0 && major2 === nums[i]) {
            cnt2 ++;
        }
    }
    if (count1 > 0 && cnt1 > Math.floor(length / 3)) {
        res.push(major1);
    }
    if (count2 > 0 && cnt2 > Math.floor(length / 3)) {
        res.push(major2);
    }
    return res;
};

往期精彩文章

参考博客: 图解摩尔投票法(Python & Go)

摩尔投票算法原理&实现一文剖析 摩尔投票法(Boyer-Moore Voting Algorithm)是一种高效的算法,主要用于在数组中寻找出现次数超过一半的元素,即多数元素。该算法由Robert S. Boyer和J Strother Moore在1981年提出,其时间复杂度为O(n),空间复杂度为O(1),是处理这类问题的最优解法。本文我将为你详细介绍摩尔投票法的原理、实现及应用场景 阅读详情

相关推荐

摩尔投票的原理详解

(Boyer-Moore Majority Vote Algorithm)是一种用于查找数组中出现次数超过一半的主要元素的高效算法。它的核心思想是通过消除不同的元素对来找到主要元素,这个算法的时间复杂度为 O(n),其中 n 是数组的长度。下面是该算法的基本原理:初始化两个变量。

double222222的博客 1690

【算法】摩尔投票算法

本文介绍了摩尔投票算法的相关知识。

代码星辰的博客 2632

摩尔投票法:O(1)空间找出数组多数元素的算法详解

在算法设计与数据结构领域,寻找数组中出现频率超过一半的“多数元素”是一类经典问题。面对海量数据,哈希表计数的高内存开销与排序的高时间复杂度往往难以满足工程需求。摩尔投票法(Boyer-Moore Voting Algorithm)基于“不同票数相互抵消”的巧妙原理,仅用候选变量与计数器两个状态,即可在线性时间内完成多数元素检测,空间复杂度低至O(1)。该算法不仅在LeetCode等算法面试中高频出现,也适用于流式数据实时统计、分布式投票合并等实际场景,为大数据处理提供了一种极简高效的状态压缩思路。理解其正确

weixin_31528001的博客 217

摩尔投票算法

数组或序列中查找出现次数超过一半。

qq_63917870的博客 1376

摩尔投票法_inventedyv3_摩尔投票法_DEMO_投票法_

勇于摩尔投票法的一个小Demo,应用场景不广,但是是一个有趣的算法

Halcon Socket TCP通讯:从算子调用到工业视觉系统集成

本文详细介绍了Halcon Socket TCP通讯在工业视觉系统中的应用与优化技巧。从基础算子调用到高并发处理,再到与PLC、机器人及MES系统的集成实战,提供了全面的解决方案和性能优化建议,帮助开发者高效实现工业视觉系统的通讯需求。

weixin_33502772的博客 248

【算法刷题日记】LeetCode 169 多数元素|摩尔投票法 C 语言

本文介绍了LeetCode第169题"多数元素"的解题过程。该题要求找出数组中出现次数超过n/2的元素,采用摩尔投票法实现最优解。文章详细阐述了摩尔投票法的核心思想:通过候选人和计数器,利用多数元素的特性在O(n)时间复杂度和O(1)空间复杂度内解决问题。作者分享了实现过程中的困惑与解决方法,强调了题目条件对算法选择的重要性,并总结了数组类题型的解题体系。通过这道题,作者掌握了摩尔投票法的经典思路,体会到算法"代码简短但思路强大"的魅力,表示要坚持每日刷题以提升算法能

2403_83686068的博客 203

一文搞懂深度学习:最全神经网络介绍

本文是深度学习系列文章的第二篇,我们将深入探讨各种类型的人工神经网络,探索它们独特的特性和应用。

2402_82802238的博客 2799

面试题39. 数组中出现次数超过一半的数字 摩尔排序法找众数

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 思路1 排序法 有题目可以知道,数组的中位数即为所求。 因此,问题可以转换为中位数问题,对数组进行排序,取nums[n/2]即可。 代码 class Solution: def majorityElem...

NLOS的博客 548

POI 写word,添加标题,表格,图片,自动生成目录,合并单元格

工程地址:https://github.com/zheng-chang-wei/word package com.example.demo1.poi; import org.apache.poi.xwpf.usermodel.XWPFDocument; import java.io.File; import java.io.FileOutputStream; public class ...

zheng_chang_wei的博客 6154

《C#零基础入门之百识百例》(七)算数运算符 -- 圆的面积

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C# 有丰富的内置运算符,本文带你学习C# 中算数运算符。

陈言必行 -- Unity游戏开发领域优质博主 3611

LeetCode 169.多数元素

描述 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 进阶: 尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。 思路1:摩尔投票法 在看答案之前,没听说过还有“摩尔投票法”这个神奇的方法,原来题述强调众数个数大于总个数的一半是有原因的。摩尔投票法即:每次选一个数作为暂时的众数tmpNum,定义变量count计数,初始值为0,从当前数后面开始看,碰

mbytes的博客 139

DC/DC开关电源学习笔记(十五)四开关Buck-Boost-FSBB升降压电路拓扑与工作原理

在DCDC领域,最为常见的是buck拓扑,其次是boost拓扑,而buck-boost的关注度相对较低。但是在电池供电场景日益普及的现在,升降压的需求在不断上升,现在更加关注buck-boost这个拓扑。而在所有buck-boost拓扑中,四开关buck-boost最受欢迎。四开关buck-boost的拓扑很简单,如下图。

小幽余生不加糖 5983

算法通过村第三关-数组黄金笔记|数组难解

java算法笔记;数组篇:双指针问题;leetcode;数据结构

weixin_46585492的博客 1165

YOLOv13全网首发:CVPR2026 MixerCSeg | DEGConv方向引导边缘门控,破解细长裂缝检测难题

DEGConv通过方向先验嵌入、边缘增强卷积和动态门控三大机制,针对性解决了YOLO在处理裂缝类细长、多方向、低对比度目标时的特征提取不足问题,显著提升了裂缝检测的精度与鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 438

CTK Plugin Framework插件框架学习1--Qt编译CTK

【代码】Qt编译CTK。

贝勒里恩的博客 7429

多数元素

给定一个数组,求出其中出现次数大于n/2的数字; 暴力方法: 先排序,直接返回第i+n/2个元素;由于排序的时间复杂度为O(n*logn),这种方法不是最优的; 方法一: 暴力法中对所有的元素进行排序,其实这是没有必要的,我们只需要保证最中间的那个元素 ...

you558的博客 180

基于MATLAB开发AUTOSAR软件应用层模块-part3.自动生成的代码文件介绍

上篇文章我们介绍了如何设计一个简单的模型,之后自动生成autosar架构的代码,这篇文章我带大家看下,生成了哪些文件,以及这些文件的内容。 生成的文件见下图: model files是模型控制逻辑部分代码,包括 DEMO1.c DEMO1.h DEMO1_private.h DEMO1_types.h DEMO1.c 1 /* 2 * File: DEMO1.c 3 * 4 * Cod.

汽车软件开发 1977

多数王座之争:数字王国的“半数霸主挑战赛”

本文通过一个生动的故事背景,讲解了一道经典面试题:找出数组中出现次数超过一半的数字。 故事设定在一个叫“数字王国”的地方,国王要选出一位获得超过一半国民支持的“半数霸主”。主角小连作为主考官,负责判断输入数组中是否存在这样的数字。文中详细介绍了两种主流解法,并配有完整的C++代码和逐行注释:1. 快排分区法(快速选择):利用快速排序的分区思想,找到中间位置的元素,并验证它是否是多数元素。2. 摩尔投票法。

大四在找工作,如果公司有需要的可以联系我13086825462@163.com 501

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

leetCode题解——Majority Element

转自:http://www.xgezhang.com/leetcode_majorigy_element.html?utm_source=tuicool 题目描述: Given an array of size n, find the majority element. The majority element is the element that appears

niansiqiao的专栏 587

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

近期 NOI\(P\) 总结

距离上一次 NOIP 不知道过去多久了,距离上一次 NOI 不知道过去多久了(笑)

Cafard的博客 801

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

测试开发岗秋招笔试全攻略:从编程题到用例设计的高分准备思路

测试开发是软件质量保障体系中的关键角色,它要求从业者同时具备代码实现能力与测试思维,理解系统原理并善于通过工程手段提升测试效率。其笔试考察逻辑与纯后端或纯功能测试不同,往往围绕编程实现、用例设计、计算机网络、操作系统、数据库等基础展开,并逐步融入AI测试与自动化工具链等前沿方向。面对这类覆盖面广、综合性强的笔试,关键在于建立从数据结构与算法到边界条件处理、从业务场景拆解到异常风险分析的系统性准备框架。本文从测开岗位筛选逻辑出发,梳理编程题、用例设计题、计算机基础及新兴AI测试等板块的考察重点,并结合真实备考

weixin_33895516的博客 529

腾讯Java后端面试:4个月备战38K offer的八股文与项目实战

在Java后端开发中,并发编程与高性能组件始终是技术进阶的核心。从HashMap的线程不安全特性到线程池参数设置,从MySQL索引优化到Redis缓存穿透应对,每一个基础知识点背后都蕴含系统设计的底层逻辑。Kafka之所以能支撑百万级并发,离不开页缓存、顺序写入与零拷贝等机制。理解这些原理,不仅能解决实际工程问题,更是大厂面试中区分普通与优秀的关键。本文结合腾讯Java后端面试经验,梳理高频考点与复习路线,帮助读者建立“面试官视角”的知识体系,从容应对技术面试。

weixin_34023982的博客 364

重温数据结构与算法之摩尔投票法

在统计学中,众数是一种重要的集中趋势指标,它表示一组数据中出现次数最多的那个值。此外在一个集合中,如果一个元素的出现次数比其他所有元素的出现次数之和还多,那么就称它为这个集合的绝对众数(等价地说,绝对众数的出现次数大于总元素数的一半)。例如,在{1,2,3,3,4}这组数据中,3就是众数,因为它出现了两次,而其他值都只出现了一次,但是没有绝对众数。寻找众数可以帮助我们了解数据的主要特征和分布情况,在某些场合下也可以作为数据代表或近似值。例如,在民意调查中,我们可能会关注哪个候选人得到了最多人的支持;

十十办文武的博客 1728

一篇搞懂面试高频算法--摩尔投票算法

【注意:小标题都是上一张图片操作后的总结】

m0_74977981的博客 2339
上一篇: 抓取牛客最新前端面试五百题 可视化分析前端面试热点
下一篇: 【缅怀钱老】学习实现炫酷漂亮的火箭发射效果
战场小包
博客等级 码龄11年 4636粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值