- 博客(27)
- 收藏
- 关注
原创 http请求的详细过程
OSI七层模型有物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。当在浏览器中输入一个网址http://www.xxxx.com/index/index.html,你接收到所要请求的页面,所发生的事情主要有四步,分别是连接——请求——应答——关闭连接。1. 连接。当我们输入一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口号建立的,因此在
2017-06-05 21:21:25
901
原创 Leetcode: symmetric-tree
题目:Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For example, this binary tree is symmetric: 1 / \ 2 2 / \ / \3 4 4 3
2017-05-26 16:34:21
570
原创 Leetcode: binary-tree-zigzag-level-order-traversal
题目:Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).For example:
2017-05-26 16:06:03
511
原创 Leetcode: linked-list-cycle-ii
题目:Given a linked list, return the node where the cycle begins. If there is no cycle, return null.Follow up:Can you solve it without using extra space?分析:给定一个链表,返回这个链表中环的开始,若无环,那么返回n
2017-05-24 17:41:30
461
原创 Leetcode: reorder-list
题目:Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…You must do this in-place without altering the nodes' values.For example,Given{1,2,3,4}, reorde
2017-05-24 10:41:59
421
原创 Leetcode: insertion-sort-list
题目:Sort a linked list using insertion sort.分析:题目要求用插入排序对一个链表进行排序,那么思路就是构建一个新的链表,将原链表中符合大小条件的结点插入到新链表中。具体代码的实现如下:/** * Definition for singly-linked list. * public class ListNo
2017-05-23 21:32:11
282
原创 Leetcode: max-points-on-a-line
题目:Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.分析:题目是给定一个二维平面上的点,希望求得这个平面上经过最多点的直线经过了多少个点。解这个题目需要用到穷举的思想,即计算每个点到其他点的斜率,如果斜率相同,则共线
2017-05-23 20:40:04
641
1
原创 Leetcode: sort-list
题目:Sort a linked list in O(n log n) time using constant space complexity.分析:在排序算法中,时间复杂度为O(n log n)的算法有快速排序,归并排序和堆排序。但由于链表的归并排序时间复杂度为O(1),所以在这里选用归并排序。归并排序的思想是将链表不断的一分为二,然后进行排序,最后将一
2017-05-23 12:21:29
367
原创 Leetcode:evaluate-reverse-polish-notation
题目描述:Evaluate the value of an arithmetic expression in Reverse Polish Notation.Valid operators are+,-,*,/. Each operand may be an integer or another expression.Some examples: ["2", "1
2017-05-22 22:47:24
287
原创 Leetcode:minimum-depth-of-binary-tree
题目描述:Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.思路:树的最小深度和最大深度不同,最大深度不需要考
2017-05-22 22:17:13
305
原创 TensorFlow学习笔记(三):深层神经网络
一、深度学习与深层神经网络维基百科对深度学习的定义为“一层通过多层非线性变换对高复杂性数据建模算法的合集”。实际上可以认为深度学习就是深层神经网络的代名词。深度学习有两个非常重要的特性,多层和非线性。1. 线性模型的局限性线性模型的输出为输入的加权和。当模型的输入只有一个时,x和y形成了二维坐标系上的一条直线。当模型有n个输入时,x和y形成了n+1维空间中的一个平面。线性模型的最大特点
2017-05-20 21:42:44
1329
原创 TensorFlow学习笔记(二):实现神经网络
使用神经网络解决分类问题主要可以分为4个步骤:提取问题中的实体的特征向量作为神经网络的输入;定义神经网络的结构,并定义如何从神经网络的输入得到输出。即前向传播算法;通过训练数据来调整神经网络中的参数取值;使用训练好的神经网络来预测未知的数据。1. 前向传播算法不同的神经网络前向的传播方式不同,这里介绍最简单的全连接网络结构的前向传播算法。一个神经元有多个输入和一个输出
2017-05-18 11:16:31
1050
原创 Tensorflow学习笔记(一):基础知识
博主准备开始学习Tensorflow,将自己学到的东西总结出来,既能够加深记忆,并且便于复习,如果能够帮助到别人那更是再好不过了。随着深度学习的快速发展,深度学习工具也有很多。主流的深度学习框架包括Tensorflow,Caffe,Theano,Torch等等,但是因为Tensorflow的内部特性以及谷歌的支持,使得将来的趋势以及资源都会向Tensorflow转,因此Tensorflow是未
2017-05-16 14:43:56
2105
原创 iphone手机找回历程
女票于2016年10月2日丢了手机,2017年1月9日终于拿到手机,历时99天。下面是女票对找手机这一段时间情形复原:先放上时间轴:10月2日:手机被盗10月3日:拿到报警回执10月9日:收到钓鱼短信10月10日:手机被刷机10月31日:拿到立案告知书12月19日:查到换机12月21日:确认手机在百华悦邦解放日报大厦店,未取走
2017-05-16 14:22:42
3059
2
原创 java排序算法整理(二)
一、交换排序利用交换数据元素的位置进行排序的方法称为交换排序。常用的交换排序有冒泡排序法和快速排序法。1. 冒泡排序基本思想:设数组中a中存放了n个数据元素,循环进行n-1趟排序过程:第一趟时,依次比较相邻的两个数据元素,若为逆序,则交换两个数据元素,这样数值最大的数据将被放置在a[n-1]中,第二趟时,循环次数减1,数据元素个数为n-1,这样整个n个数据元素中次大的数据元素被放置在a[n-1]中。
2017-05-16 12:18:31
306
原创 java排序算法整理(一)
排序是应用软件设计中经常遇到的问题之一,也是在面试过程中最常考察的算法。排序是对数据元素序列简历某种有序排列的过程。这里总结一下常用的排序算法,主要有插入排序、交换排序、选择排序、归并排序和基数排序等,并附上Java代码的实现(本文主要讨论非递减有序排序)。1. 插入排序插入排序的基本思想是:从初始有序的子集合开始,不断地把新的数据元素按其值的大小插入到已排序数据元素子集合的适当位置,使子集合中数据
2017-05-14 17:24:49
527
原创 java网络编程(一):基础知识
1. 网络基础知识 计算机网络就是把分布在不同地理区域的计算法与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便的互相传递信息,共享硬件、软件、数据信息等资源。计算机网络可以提供以下功能:资源共享信息传输与集中处理均衡负荷与分布处理综合信息服务根据不同的分类原则,可以得到各种不同类型的计算机网络。计算机网络通常按照规模大小和延伸范围来分类,常见的划分
2017-05-09 18:19:15
479
原创 java多线程(三)
线程通信当线程在系统内运行时,线程的调度具有一定透明性,程序通常无法准确控制线程的轮换执行,但我们可以通过一些机制来保证线程协调运行。1. 线程的协调运行 假设系统中有两条线程,分别代表存款这和取钱者。系统要求存款者和取钱者不断的重复存款、取钱的动作,而且要求每当存款者存入取钱者就立即取出,不允许连续存或取。 为实现这种功能,可以借助Object类提供的wait()、notify()和notif
2017-05-07 16:53:12
290
原创 java多线程(二)
一、控制线程Java的线程支持提供了一些便捷的工具方法,通过这些便捷的工具方法可以很好的控制线程的执行。1. join线程 Thread提供了一个让线程等待另一个线程完成的方法:join()方法。当某个程序执行过程中,调用另外一个线程的join()方法时,调用线程将被阻塞,直到被join方法加入的join线程完成为止。 join()方法通常由使用线程的程序调用,将大问题划分成许多小问题,每个小问
2017-05-06 17:44:21
302
原创 java多线程(一)
一、线程概述几乎所有的操作系统哦都支持同时运行多个任务,一个任务通常指一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。1. 线程和进程 所有运行中的任务通常对应一条进程,进程是系统进行资源分配和调度的一个独立单位。 进程包含三个特征:独立性:每一个进程拥有自己私有的地址空间,一个用户进程不可以直接访问其他进程的地址空间动态性
2017-05-06 16:43:39
346
原创 java知识点整理
一、String类字符串存储在内存的常量池中,若一个字符串在内存中已经存在,则不会重新开辟空间。 例如:String s1 = “abc”; String s2 = “abc”;String s3 = new String(“abc”); s1 == s2, true s1 == s3, false字符串常见的操作: a. 获取 a.1字符串的长度:int le
2017-05-06 16:13:16
571
原创 机器学习总结(六):K-means总结
K-Means是非常常见的聚类算法,思想简单,易于实现,现在已经被广泛应用到各种聚类任务当中。K-Means的基本思想是先初始化聚类中心,然后计算所有点到不同聚类中心的距离,重新计算聚类中心,反复迭代,直到聚类中心没有变化或者到达最大的迭代次数停止。因为思想简单,所以易于使用,但是这个方法存在着很多问题。1. 计算量非常大;2. 聚类中心的数量K需要提前设定,并且聚类中心的数量也会影响到聚类结果;3
2017-04-24 11:51:16
1990
原创 机器学习总结(五):Batch Normalization
Batch Normalization是深度学习领域在2015年非常热门的一个算法,许多网络应用该方法进行训练,并且取得了非常好的效果。众所周知,深度学习是应用随机梯度下降法对网络进行训练,尽管随机梯度下降训练神经网络非常有效,但是它有一个缺点,就是需要人为的设定很多参数,比如学习率,权重衰减系数,Dropout比例等。这些参数的选择对训练结果至关重要,以至于训练的大多数精力都耗费在了调参上面。BN
2017-04-13 20:50:34
1460
原创 机器学习总结(四):RF,SVM和NN的优缺点
1. 随机森林优缺点随机森林(RF)是Bagging的一个扩展变体。RF在以决策树为基分类器进行集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。Bagging就是对数据集训练多个基分类器,然后将基分类器得到的结果进行投票表决作为最终分类的结果。基分类器在构建过程中需要尽可能保证训练出的基分类器有比较大的差异性,这就需要用对训练样本集进行采样,不同的基分类器训练不同的样本集。但是样本过少会
2017-04-13 18:06:01
37666
原创 机器学习总结(三):如何防止过拟合
通常过拟合由以下三种原因产生:1. 假设过于复杂;2. 数据存在很多噪音;3. 数据规模太小。 过拟合的解决方法通常有:1. early stopping;2. 数据集扩增;3. 正则化;4. Dropout。Early stopping:对模型的训练过程就是对模型参数的进行学习更新的过程。参数学习的过程中往往会用到一些迭代算法,比如梯度下降法。Early stopping的目的就是在迭代次数还未
2017-04-08 17:34:34
6986
1
原创 机器学习总结(二):梯度消失和梯度爆炸
神经网络的训练过程通常分为两个阶段:前向传播和反向传播。 前向传播如下图所示,原理比较简单 上一层的神经元与本层的神经元有连接,那么本层的神经元的激活等于上一层神经元对应的权值进行加权和运算,最后通过一个非线性函数(激活函数)如ReLu,sigmoid等函数,最后得到的结果就是本层神经元的输出。逐层逐神经元通过该操作向前传播,最终得到输出层的结果。 反向传播由最后一层开始,逐层向前传播进行
2017-04-05 14:39:28
33926
原创 机器学习总结(一):常见的损失函数
这是博主的第一篇博客,mark一下,希望今后能够坚持下去。博主是机器学习菜鸟,将来希望从事机器学习的工作,最近在整理机器学习的知识点,将这些总结的文字以博客的形式展现出来,一是便于复习,二是分享出来希望能对别人会有一点点帮助。最近搜集了一些机器学习常见的面试问题,将问题和回答整理出来,做到有备无患。(随时进行补充)一、常见的损失函数通常机器学习每一个算法中都会有一个目标函数,算法的求解过程是通过对这
2017-03-30 15:25:36
49969
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人