算法基础重构:
算法
1.一个有限指令集
2.接受一些输入(一些情况下不接受输入)
3.产生输出
4.一定在有限步骤之后终止
5.没一条指令必须: (1)有充分明确的目标,不可以有歧义
(2)计算机能处理的范围之内
(3)描述不依赖于任何一门编程语言以及具体的实现,主要是抽象出解决问题的思路
好的算法: 时间复杂度小,空间占比小,程序简洁(一般使用渐进表示法描述算法的时间复杂度)
一些常见时间复杂度

1.1基础编程模型

1.1.1java程序基本结构

原始数据类型:它们在计算机程序中精确定义整数,浮点数,布尔值。

语句:程序通过语句执行实现功能:6种语句(声明,赋值,条件,循环,调用,返回)

数组:多个同种数据类型的值的集合

静态方法:静态方法可以封装并重用代码,使得我们可以用独立的模块开发。

字符串:一连串的字符,java内置了对它们的一些操作。

标准输入/输出:输入输出是程序与外界链接的桥梁。

数据抽象:数据抽象封装和重用代码,使我们可以定义非原始数据类型,进而支持面向对象编程。

1.1.2原始数据类型与表达式

整型(int) 双精度实数类型(double)

布尔类型(true,false)

字符型(char)

java使用的是中缀表达式:一个字面量(或是一个表达式),紧接着是一个运算符,再接着是另一个字面量(或者另一个表达式)。

运算符优先级: *,/,%优先级高于+,-(优先级越高,越早运算)。逻辑运算符中,!拥有最高优先级,之后是&&,接着是||。一般来说,相同优先级的运算符运算顺序是从左到右。一般采取括号比较好。

64位整数: long

16:short

32:int

16位字符:char

8位整数: byte

32位单精度实数:float

类型转换:低精度到高精度,自动转换,且不会损失精度值(eg:1+2.78),高精度到低精度需要强制转换,会损失一定的精度值(eg:2.98(int))。

比较运算符: <=,>=,==,!=,这些都是混合运算符,还有>,<两个比较运算符。

自增自减(++,–)i++在程序中会执行,但是先使用未加的i再执行自增,具体根据情况而定。

布尔型的表达式被称为布尔表达式

1.1.3语句

声明(关键字),赋值(=),条件(if else),循环(for,while),调用(函数名();和对象或者类的.方法名();),控制(break,continue),返回(return)这7类语句

一般代码结构都是具有一定的框架并且是嵌套的:eg:循环嵌套

1.1.4简便记法

1.1.5数组

创建并初始化数组3步走战略:1.声明数组的名字和类型,2创建数组,3,初始化数组元素

eg:

   double[] a;a=new double[N];for(int i=0;i<N;i++)a[i]=0.0;//初始化数组

简化写法: double[] a=new double[N];;

声明初始化:int[] a={1,2,3,4,5,6};

典型数组处理代码:

1.找出数组中最大元素

double max=a[0];
for(int i=1;i<a.length;i++)
if(a[i]>max) max=a[i];

2.计算数组元素平均值

int N=a.length;
double sum=0.0;
for(int i=0;i<N;i++)
sum+=a[i];
double average=sum/N;

3.复制数组

package java1;
public class f {public static void main(String[] args) {// TODO 自动生成的方法存根int i;
int[] a= {1,2,3,4,5,6,7};
int N=a.length;
int[] b=new int[N];
for(i=0;i<N;i++) {b[i]=a[i];System.out.println(b[i]);}}}

4.颠倒数组元素的顺序


int N=a.length;
for(int i=0;i<N/2;i++){double temp=a[i];
a[i]=a[N-1-i];
a[N-1-i]=temp;
}

5.矩阵相乘


int N=a.length;
double[][] c=new double[N][N];
for(int i=0;i<N;i++)
for(int j=0;j<N;j++){//计算行i和列j的点乘
for(int k=0;k<N;k++)
c[i][j]+=a[i][k]*b[k][j];
}

6.二维数组

double[][]  a=new double[M][N];

1.1.6静态方法

目前学习的所有java程序要么是数据类型的定义,要么是一个静态方法库。

典型静态方法的实现:
计算一个整数的绝对值

public static int abs(int x){if(x<0) return -x;
else return x;

计算一个浮点数的绝对值

public static double abs(double x){if(x<0.0) return -x;
else return x;
}

判断一个数是否是素数

public static boolean isPrime(int N){if(N<2) return false;
for(int i=2;i*i<=N;i++)
if(N%i==0) return false;
return true;
}

计算平方根

public static double sqrt(double c){if(c<0) return Double.NaN;
double err=1e-15;
double t=c;
while(Math.abs(t-c/t)>err*t;
t=(c/t+t)/2.0;
return t;
}

计算三角形的斜边

public static double hypotenuse(double a,double b){return Math.sqrt(a*a+b*b);

计算调和级数

public static double H(int N){double sum=0.0;
for(int i=1;i<=N;i++)
sum+=1.0/i;
return sum;
}

1.1.7API

1.1.8字符串

1.1.9输入输出

1.1.10二分查找

1.1.11展望

第一个算法:2300多年前的欧几里得算法:

计算两个非负整数p和q的最大公约数:若q是0,则最大公约数是p,否则,将p除以q得到余数

r,p和q的最大公约数即为q和r的最大公约数。

java语言描述:

public static int  gcd(int p,int q){if(q==0) return p;
int r=p%q;
return gcd(q,r);
}

Algorithm1相关推荐

  1. Algorithm1——一组数据求出max1和max2

    本系列算法实现都是在学习数据结构(C++语言版),清华大学邓俊辉教授编,听邓老师edX网课过程中自己实现的例子. 问题:求出数组A[]中的最大值下标max1和次大值下标max2? 解决:用三种方法去实 ...

  2. GraphSAGE:我寻思GCN也没我厉害!

    作者 | 郭必扬来源 | SimpleAI(ID:SimpleAI_1) 众所周知,2017年ICLR出产的GCN现在是多么地热门,仿佛自己就是图神经网络的名片.然而,在GCN的风头中,很多人忽略了G ...

  3. 求二叉树中第K层结点的个数

    一,问题描述 构建一棵二叉树(不一定是二叉查找树),求出该二叉树中第K层中的结点个数(根结点为第0层) 二,二叉树的构建 定义一个BinaryTree类来表示二叉树,二叉树BinaryTree 又是由 ...

  4. TensorFlow文本摘要生成 - 基于注意力的序列到序列模型

    1 相关背景 维基百科对自动摘要生成的定义是, "使用计算机程序对一段文本进行处理, 生成一段长度被压缩的摘要, 并且这个摘要能保留原始文本的大部分重要信息". 摘要生成算法主要分 ...

  5. 何恺明团队最新力作SimSiam:消除表征学习“崩溃解”,探寻对比表达学习成功之根源...

    ↑ 点击蓝字 关注深度学习技术前沿 作者|Happy 编辑丨极市平台 导读 本文是FAIR的陈鑫磊&何恺明大神在无监督学习领域又一力作,提出了一种非常简单的表达学习机制用于避免表达学习中的&q ...

  6. MySQL · B+树并发控制机制的前世今生

    前言 1970年,Rudolf Bayer教授在<Organization and Maintenance of Large Ordered Indices>一文中提出了B树[1],从它基 ...

  7. 强化学习中的脉冲神经网络

    简 介: 脉冲强化学习是最近兴起的将脉冲神经网络应用到强化学习中的一个研究领域.固然脉冲神经网络的引入会给强化学习带来一些新的东西,但目前的研究仍然仅仅满足于如何让算法收敛,而没有发挥出脉冲神经网络独 ...

  8. java火山_各种排序算法java实现

    插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.SortUtil; /** * @author ...

  9. 【深度学习笔记】ROC曲线 vs Precision-Recall曲线

    ROC曲线的优势 ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持稳定.在实际的数据集中经常会出现类不平衡现象,而且测试数据中的正负样本的分布也可能随着时间变化.下图 ...

最新文章

  1. 精读《Function VS Class 组件》
  2. java数组去重_再谈JavaScript数组去重
  3. JDK 1.5 环境变量的配置
  4. 《Qt on Android核心编程》夹
  5. Hbase的基于快照的表修复
  6. 考研调剂 计算机科学 软件,2020年四川大学计算机学院(软件学院)考研调剂信息...
  7. GBDT算法(最简单)
  8. Linux进程间通信(2)信号量
  9. 学术论文的格式要求是怎样的?
  10. Mujoco-小球建模与控制
  11. 来看看小夏的链表讲解吧---从单链表到输入输出,查找元素,删除结点。---谨以此文祝朋友们生日快乐与官宣发糖。
  12. 【Unity】实现立体的UI
  13. Android 设备管理器和有权查看使用情况的应用详解
  14. MSP430 MSP430单片机输入/输出模块 通用I/O端口GPIO LED按键
  15. mysql数据库访问记录_MySQL数据库运行、访问记录与日志
  16. 聊聊P2P网贷平台的风险【站在平台的角度】
  17. spark 读取lzo 环境依赖
  18. 计算机电子极域控制,极域电子教室控制软件操作手册
  19. word设置每页50行
  20. 组策略应用:软件分配及软件发布

热门文章

  1. 使用java开发spark实战
  2. android ap bp,手机刷机中 AP BP是什么意思
  3. 服务器开机显示器没反应,老司机教你开机显示器没反应怎么办
  4. Ubuntu中mininet的可视化界面
  5. php 制作骰子游戏,C/C++实现投骰子游戏
  6. 敏感性、特异度、α、β、阳性预测值(PPV)、阴性预测值(NPV)等指标及置信区间计算(附R语言代码)
  7. 技术支持售前人员岗位技能与职责
  8. 将小米SoundMove 无缝接入 ChatGPT
  9. FilterConfig.RegisterGlobalFilters 全局过滤器的用法
  10. 华为视频终端默认的Web页面用户名和密码是多少