Day02Homework
import java.util.Scanner;/** * 判断季度 * 根据用户输入的月份值,判断该月属于那个季度; */public class Test01 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int month = scanner.nextInt(); System.out.println("请输入月份"); switch (month){ case 1: case 2: case 3: System.out.println("第一季度"); break; case 4: case 5: case 6: ...
运算符与分支流程控制
运算符与分支流程控制运算符运算符的概念执行特定的数学或逻辑等操作的符号
算数运算符四则运算是最常见的数学运算,运算规则与数学中的数学运算基本一样,也有一些细微的区别
整数除法得到整数结果(无论是否可以被整除)!
/** * 算术四则运算 */public class ArithmeticDemo { public static void main(String[] args) { //一般情况 int a = 50; int b = 100; System.out.println(a+b);//整数加上整数,结果也是整数 a = Integer.MAX_VALUE; b =1; System.out.println(a+b); //溢出 -2147483648 //解决溢出问题 采用更大表示范围的类型来接收计算结果 //两个int类型的变量计算的结果还是int 计算完成后再转成long 还是会溢出 //解决办法是 将其中 ...
java环境搭建和基本数据类型
java环境搭建和基本数据类型java环境搭建java编程语言的构成
JDK: java开发工具包 (开发需要),包括JRE和开发工具
JRE:java程序运行的最小环境 (运行java是必要的),包括JVM和API
JVM :执行java字节码文件的虚拟机
关系 JDK(JRE(JVM))
第一个java程序HelloWorld/** * 第一个java程序 Hello World */public class HelloWorld { //main方法,程序的入口 public static void main(String[] args) { //输出语句 System.out.println("Hello World"); }}
注释
单行注释
//这是单行注释
多行注释
/*这是多行注释*/
文档注释
/***文档注释:对当前的程序进行说明(功能,编写日期,编写人)文档注释一般写在类或方法上;*/
java运行原理Java程序的执行流程
java源代码(.j ...
Hadoop大数据技术原理与应用
hadoop入门概念Hadoop是什么
分布式系统基础架构
主要解决海量数据的存储和海量数据的分析计算问题
Hadoop发展历史Hadoop的三大发行版本
Apache 对于入门学习最好
Cloudera 内部集成了很多大数据框架 对应产品 CDH
Hortonworks 文档较好, 对应产品 HDP
Hadoop的优势
高可靠性:Hadoop底层维护多个数据副本
高扩展性
高效性:Hadoop是并行工作的
高容错性:能够自动将失败的任务重新分配
Hadoop的组成
Common(辅助工具)
HDFS(数据存储)
NameNode 数据存储在什么位置
2NN 辅助NameNode工作,每隔一段时间对NameNode元数据备份
DataNode 具体存储数据
YARN(资源调度)
ResourceManager:整个集群资源(内存、cpu等)的管理者,老大
NodeManager:单个节点服务器资源的管理者
ApplicationMaster:单个任务运行的管理者
Container:容器,相当于一台独立的服务器,里面封装了任务运行所需要的资源
客户端可以用多个 可以运行多 ...
贪心算法
贪心算法的基本介绍
贪心算法是指在对问题进行求解时,在每一步选择中都采取最好或最优的选择,从而希望能够导致结果是最好或者最优的算法
贪心算法得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似最优解的结果
贪心算法案例分析贪心算法思路分析
遍历所有的广播电台,找到一个覆盖了最多未覆盖过的地区的电台
将这个电台加入到一个集合中,想办法把该电台覆盖的地区在下次比较时去掉
重复第一步直到覆盖了全部的地区
import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;public class 贪心算法 { public static void main(String[] args) { //创建广播电台,放入到MAp HashMap<String, HashSet<String>> broadcasts =new HashMap<String,HashSet<String>>(); ...
kmp算法
kmp算法的介绍
kmp是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法
kmp算法又叫做字符串查找算法
kmp算法就利用之前判断过信息,通过一个next数组,保存模式串中前后最长公共子序列的长度,每次回溯时,通过next数组找到,前面匹配过的位置,省去了大量的计算时间
算法思想
先得到子串的部分匹配表
使用部分匹配表完成KMP匹配
kmp算法代码实现public class KMP { public static void main(String[] args) { String str1 ="BBC ABCDAB ABCDABCDABDE"; String str2 ="ABCDABD"; int[] next=KmpNext(str2); System.out.println(KmpSearch(str1, str2, next)); } //kmp搜索算法 public static int KmpS ...
动态规划算法
基本介绍
动态规划算法的核心思想是:将大问题划分成小问题进行解决,从而一步步获取最优解的处理算法
动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解
与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。
动态规划可以通过填表的方式来逐步推进,得到最优解
背包问题背包问题主要是指一个给定容量的背包、若干具有一定价值和重量的物品,如何选择物品放入背包使物品的价值更大。其中又分01背包和完全背包(每种物品可以无限件可用)
这里的问题属于01背包,即每个物品最多放一个。而无限背包可以转化为01背包
思路分析算法的主要思想,利用动态规划来解决。每次遍历到的第i个物品,根据w[i]和v[i]来确定是否需要将该物品放入背包中。即对于给定的n个物品,设v[i]、w[i]分别为第i个物品的价值和重量,c为背包的容量。再令v[i] [J] 表示在前i个物品中能够装入容量为j 的背包中的最大值。则我们有下面的结果:
v[i] [0] = v[0] [j] = 0;
当w[i] > ...
动态规划算法
基本介绍
动态规划算法的核心思想是:将大问题划分成小问题进行解决,从而一步步获取最优解的处理算法
动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解
与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。
动态规划可以通过填表的方式来逐步推进,得到最优解
背包问题背包问题主要是指一个给定容量的背包、若干具有一定价值和重量的物品,如何选择物品放入背包使物品的价值更大。其中又分01背包和完全背包(每种物品可以无限件可用)
这里的问题属于01背包,即每个物品最多放一个。而无限背包可以转化为01背包
思路分析算法的主要思想,利用动态规划来解决。每次遍历到的第i个物品,根据w[i]和v[i]来确定是否需要将该物品放入背包中。即对于给定的n个物品,设v[i]、w[i]分别为第i个物品的价值和重量,c为背包的容量。再令v[i] [J] 表示在前i个物品中能够装入容量为j 的背包中的最大值。则我们有下面的结果:
v[i] [0] = v[0] [j] = 0;
当w[i] > ...
分治算法
分治算法介绍
分治法是一种很重要的算法。字面上的解释是‘分而治之’,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题。。。。直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础
分治算法可以求解一些经典问题
二分搜索
大整数算法
棋盘覆盖
合并排序
快速排序
线性时间选择
最接近点对问题
循环赛日程表
汉诺塔
代码实现
public class 汉诺塔 { public static void main(String[] args) { hanoiTower(5, 'a', 'b', 'c'); } public static void hanoiTower(int num,char a, char b,char c){ if(num == 1){ System.out.println("第1个盘从"+a+&q ...
二分查找算法(非递归)
非递归二分查找介绍
二分查找算法只适用于从有序的数列中进行查找,将数列排序后在进行查找
二分查找法的运行时间为对数时间O(log2n),即查找到需要的目标位置最多只需要log2n步。
public class 二分查找 { public static void main(String[] args) { int arr[]={1,2,35,57,78,99,100}; System.out.println(run(arr, 99)); } public static int run(int arr[],int target){ int left = 0; int right = arr.length-1; while (left<=right){ int mid = (left + right) / 2; if (arr[mid] == target){ ...