糊糊

Never forget why you started, and your mission can be accomplished.


  • Home

  • Archives

微软(苏州)面经(一)

Posted on 2018-02-13

矩阵元素分类

题目:一个矩阵中元素分类的算法。一个矩阵中的元素和它周围八个元素是相邻的。如果两个元素相邻且相等就认为他们是一类。

输入m*n矩阵A,输出分类后的m*n矩阵B.

Example:

input1: 2*2矩阵

1  2
3  4

output1:2*2矩阵

a  b
c  d

input2: 4*4矩阵

1  2  3  3
5  6  7  3
1  2  0  3
3  3  3  5

output2:4*4矩阵

a  b  c  c
d  e  f  c
h  i  j  c
c  c  c  m

理解链表

Posted on 2018-01-09

链表是一种动态数据结构,因为在创建链表时,无须知道链表的长度。

当插入一个结点时,我们只需要为新结点分配内存,然后调整指针的指向来确保新结点被链接到链表当中。内存分配不是在创建链表时一次性完成,而是每添加一个结点分配一次内存。
由于没有闲置的内存,链表的空间效率比数组高。

单链表

整个链表的存取必须从头指针开始进行,头指针指示链表的第一个结点的存储位置。

区分首元结点、头结点、头指针

首元结点:链表中的第一个结点
头结点:首元结点之前附设的结点
头指针:指向链表中第一个结点的指针。若有头结点,则指向头结点,若无,则指向首元结点。

ListNode

ListNode为结构体,定义如下:

struct ListNode
{
    int val;
    ListNode *next;
    ListNode(int x): val(x), next(NULL){};
}

根据网络训练时的学习曲线评估模型训练效果

Posted on 2018-01-08

当验证集准确率一直低于训练集准确率,但无明显下降趋势,这说明此时模型复杂度欠缺,模型能力有限。–欠拟合,增加层数、调整激活函数增加网络非线性、减小模型正则化等措施增大网络复杂度。

当验证集准确率一直低于训练集准确率,且随着训练轮数增加有明显下降趋势。–过拟合,增大网络模型正则化削弱网络复杂度。

也可对应loss的变化。

如何防止过拟合?

  • 增大网络模型正则化
  • early stopping
  • 增加训练数据或者尝试更多数据扩充方式
  • dropout

随机失活 dropout

原理:对于某层的每个神经元,在训练阶段均以概率p随机将该神经元权重置0,测试阶段所有神经元均呈激活态,但其权重需乘(1-p)以保证训练和测试阶段各自权重拥有相同的期望。

由于失活的神经元无法参与到网络训练,因此每次训练(前向操作和反向操作)时,相当于面对一个全新网络。随机失活后,相当于指数级子网络的网络集成,对于提升模型泛化性效果显著。

在工程实现中采用“倒置随机失活”,在训练阶段直接将随机失活后的网络响应乘以1/(1-p),这样测试阶段不需做任何量级调整。

const在函数传参时的使用

Posted on 2018-01-02

const 指针的定义

声明指针时,可以在类型前或后使用关键字const,也可在两个位置都使用。例如,下面都是合法的声明,但是含义大不同:

const int* pOne;    //指向整型常量的指针,它指向的值不能修改
int* const pTwo;    //指向整型的常量指针,它不能在指向别的变量,但指向(变量)的值可以修改。 
const int *const pThree;  //指向整型常量的常量指针。它既不能再指向别的常量,指向的值也不能修改。

关键字const右边来确定什么被声明为常量 ,如果该关键字的右边是类型,则值是常量;如果关键字的右边是指针变量,则指针本身是常量。

Read more »

判断点在多边形内部还是外部

Posted on 2018-01-02

判断点在多边形内部还是外部

对任意给的一个多边形和一个已知点,如何判断该点在多边形的内部,外部还是就在多边形上?

如果给定的多边形是凸多边形

法一: 如果点在四边形内,那么所有经过这个点的直线都会和边相交,并且一定是在两个交点之间。反之如果在四边形外,那么就有三种可能,一种是没交点,一种是一个交点,最后一种是两个交点。但因为是凸四边形所以必然不在中间。所以可以任取一条过点直线,判断该点是否在交点之间,就可以得出是否是在四边形内了。

法二: 如果点在这个凸四边形内,那么按照逆时针方向走的话,该点一定会在每一条边的左边。

Read more »

斐波那契数列

Posted on 2017-12-30

求斐波那契数列

题目

写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项,斐波那契数列的定义如下:

f(n) = f(n-1) + f(n-2) n>1
f(0) = 0; f(1) = 1;

题目变形

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求解该青蛙跳上n级台阶总共有多少种跳法?

递归算法

long long Fibonacci(unsigned int n)
{
    if (n <= 0)
        return 0;
    if (n == 1)
        return 1;
    return Fibonacci (n-1) + Fibonacci(n-2);
}

存在大量的重复计算!!!

该算法计算量会随着n的增大而急剧增大,时间复杂度以n的指数的方式递增!!!

从下往上计算(实用的算法)

根据f(0)和f(1)计算f(2),再根据f(1)和f(2)计算f(3)……以此类推计算出第n项。

该算法的时间复杂度是O(n)!!!

Read more »

C++中的多态

Posted on 2017-12-29

什么是多态?

当想不同的人发出同样的一个命令时,不同的人可能有不同的反应。这就是多态性。

有了多态性,相当于对象有了主观能动性。对对象的使用者而言,使用起来就方便了。特别是当被管理对象的数量和类型增加时,管理者的工作量并不增加。

Read more »

深度学习中的数据预处理

Posted on 2017-12-26

从广义上讲,数据预处理可以认为是在正式进入深度网络计算之前的一切操作。除了狭义上的对数据做归一化、缩放等直接的数据预处理外,数据扩充、不平衡样本的处理、数据shuffle等也可以认为是数据预处理的方式。这里,就几种总结一下对数据的各种操作方式以及他们的作用和意义。

Read more »

Android Stuio Proxy Settings

Posted on 2017-12-23

由于项目需要,最近需要做安卓开发,因此开始了Android Studio的小白之旅。

Anndroid Studio 2.3.2

打开project,第一个要面对的就是Proxy Settings配置代理,当然也可以通过File->Settings->Apperarance&Behavior->System Settings->HTTP Proxy打开配置。

这里主要说明两种方法。

  1. HTTP
  • Host name: mirrors.neusoft.edu.cn

  • Port num: 80

  1. SOCKS
  • Host name: 127.0.0.1

  • Port num: 1080

Hexo + GitHub搭建个人博客

Posted on 2017-12-22

Hexo + GitHub 搭建个人博客

Hexo是一个快速、简洁且高效的博客框架,而Github是一个免费的代码托管工具,利用Github Pages可以免费创建一个静态网站。下面将介绍如何使用Hexo和Github,在win10环境下搭建一个个人博客。

Read more »

Zunli Hu

10 posts
7 tags
© 2018 Zunli Hu
Powered by Hexo
|
Theme — NexT.Muse v5.1.3