算法初学的一些心得

前言:现在工作也快一年多了,有时间下班回家会学学算法,陆陆续续也接触了一些 貌似我知道的就冒泡排序其他的都不是很了解

最近买了一本书,边学边记录吧!

一些常用的方法

  • 暴力破解

下面是我的一些理解 其实也是 程咬金的三板斧 又不对之处欢迎大家指出!

暴力破解

简单来说就是 利用for循环去找出每种情况,需要强大的硬件和运算速度。 最简单快捷的实现方式

假设修正法

就是去假设一些情况通常我们会对一些情况进行逻辑判断比如判断三个书的大小 一般的做法是循环比较或者多个if else 之类的但是有时候程序需要有 易用性 和 可读性

int a=4,b=8,c=2; //如何比较 可以试试这样
int m=0;
if(a>m) m=a;
if(b>m) m=b;
if(c>m) m=c;
printout(m);
--->>>8

通过上面的就是假设m是最大的数这样写的话程序会清晰很多。

还有一个例子:

判断一个书是否是闰年

int year=0; bool isYear=false;
if(year%4==0&&year%100!=0||year%400==0)
{
isYear=true;
}
bool isYear=false; //假设为false
if(year%4==0) isYear=true;
if(year%100==0) isYear=false;
if(year%400==0) isYear=true;

以上代码也是通过假设

常数变异法

相关问题 1 :打印一个金字塔

         *
* *
* * *
* * * *
* * * * *
如何实现
先打印 一排* 号 利用两个for循环
for(int i=0;i<5;i++)
{
Console.Write(" ");
}
for(int i=0;i<5;i++)
{
Console.Write("* ");
}
//输出结果 * * * * *
如果要输出四个"* " 就将上面的两个循环改成
for(int i=0;i<6;i++)
{
Console.Write(" ");
}
for(int i=0;i<4;i++)
{
Console.Write("* ");
}
依次类推 一直到打印1个 "*"
上面的数字分别是 5 5 --> 6 4 -->7 3 -->8 2 -->9 1
其中的规律 9-1=8 9-2=7 9-3=6 9-4=5
所以
利用第三个for循环
for(int k=0;k<5;k++)
{
for(int i=0;i<9-k;i++)
{
Console.Write(" ");
}
for(int i=0;i<k+1;i++)
{
Console.Write("* ");
}
}

这样就可以打印出一个简单的图像了,

还有就是可以打印出一个

             A
A B A
A B C B A
A B C D C B A
A B C D E D C B A

这样的图像

思考

学习算法主要还是平时多积累。有时候一些简单的问题就是想不明白,但是别人一说就觉得不是很难。经常会有这样的情况就是平时思考的少了

算法学习笔记,几个简单的Demo的更多相关文章

  1. Johnson算法学习笔记

    \(Johnson\)算法学习笔记. 在最短路的学习中,我们曾学习了三种最短路的算法,\(Bellman-Ford\)算法及其队列优化\(SPFA\)算法,\(Dijkstra\)算法.这些算法可以快 ...

  2. 某科学的PID算法学习笔记

    最近,在某社团的要求下,自学了PID算法.学完后,深切地感受到PID算法之强大.PID算法应用广泛,比如加热器.平衡车.无人机等等,是自动控制理论中比较容易理解但十分重要的算法. 下面是博主学习过程中 ...

  3. C / C++算法学习笔记(8)-SHELL排序

    原始地址:C / C++算法学习笔记(8)-SHELL排序 基本思想 先取一个小于n的整数d1作为第一个增量(gap),把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组 ...

  4. Manacher算法学习笔记 | LeetCode#5

    Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...

  5. Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息

    </pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...

  6. Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息

    Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...

  7. Spring MVC 学习笔记8 —— 实现简单的用户管理(4)用户登录

    Spring MVC 学习笔记8 -- 实现简单的用户管理(4)用户登录 增删改查,login 1. login.jsp,写在外面,及跟WEB-INF同一级目录,如:ls Webcontent; &g ...

  8. Johnson 全源最短路径算法学习笔记

    Johnson 全源最短路径算法学习笔记 如果你希望得到带互动的极简文字体验,请点这里 我们来学习johnson Johnson 算法是一种在边加权有向图中找到所有顶点对之间最短路径的方法.它允许一些 ...

  9. [原创]java WEB学习笔记41:简单标签之带属性的自定义标签(输出指定文件,计算并输出两个数的最大值 demo)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  10. 算法学习笔记——sort 和 qsort 提供的快速排序

    这里存放的是笔者在学习算法和数据结构时相关的学习笔记,记录了笔者通过网络和书籍资料中学习到的知识点和技巧,在供自己学习和反思的同时为有需要的人提供一定的思路和帮助. 从排序开始 基本的排序算法包括冒泡 ...

随机推荐

  1. Android零基础入门第75节:Activity状态和生命周期方法

    前面两期我们学习了Activity的创建和注册.以及启动和关闭,也学会了重写onCraete方法,这些知识在实际开发中远远不够,还需要学习了解更多. 生命周期就是一个对象从创建到销毁的过程,每一个对象 ...

  2. Maven 安装和使用

    Maven 安装和使用 1.下载 http://maven.apache.org/download.cgi 2.tar -bin.tar.gz 3.环境变量 /etc/profile export M ...

  3. 冒泡排序C#实现,使用委托,包括三种方式:Fun<>,匿名方法,Lambda表达式

    冒泡排序是一种简单的排序方法,适合于小量数字排序,对于大量数字(超过10个),还有更高效的排序方法. 这里的实现的冒泡排序,需实现功能: 不仅数字排序,还要对任意对象排序 示例: 对People对象的 ...

  4. 设置tablewidget自适应列宽和设置自动等宽

      在网上很容易知道自适应列宽,100%不留空显示,这里还是提下: /*设置表格是否充满,即行末不留空*/ ui->tableWidget->horizontalHeader()-> ...

  5. QT+OpenCV+OpenGL安装

    Ubuntu 10.04.3 LTS ("fresh" install) OpenCV 2.3.1 Qt SDK version 1.2.0 for Linux/X11 32-bi ...

  6. 关于JDK和JRE的一些总结

    一.关于JDK和JRE JDK (Java Development Kit)即java开发工具,包括JER及代码编译器(javac).文档注释器(JavaDoc).代码调试器(Java Debugge ...

  7. 使用pjax实现类似github无刷新更改页面url

    pjax=pushState+ajax,相信用过github的同学都知道,github部分页面采用了pjax这个项目来实现ajax无刷新加载的同时改变页面url.一起来学习一下这个插件吧. 我们都知道 ...

  8. Java基础(二) 基本类型数据类型、包装类及自动拆装箱

    我们知道基本数据类型包括byte, short, int, long, float, double, char, boolean,对应的包装类分别是Byte, Short, Integer, Long ...

  9. java多线程之Lock/Condition简介

    在java多线程中,可以使用synchronized关键字实现线程之间的同步互斥,在jdk1.5中增加的ReentrantLock也能实现同样的效果,并且功能更加强大. 比如具有嗅探锁定,多路分支通知 ...

  10. screen命令使用简单说明

    首先用screen [-S]命令建立一个session,然后就可以在这个session中建立多个window了.使用screen [-S]可以建立多个session,而每个session又可以建立多个 ...