算法--基础编程模型
来源:互联网 发布:洛奇英雄传单机版淘宝 编辑:程序博客网 时间:2024/05/16 16:56
参考书籍:《算法(第四版)》
了解
算法和数据结构相关联,为了实现算法,才需要组织数据,才产生了数据结构。数据结构是为了辅佐算法而来。
编写程序时,首要考虑正确性,这就包括了边界的考虑,输入的校验。保证正确的基础上才能去实现其他的算法,提高程序的性能。
基础
程序首要是考虑边界,例如以下程序计算2数之和:
public static int avg(int a, int b) { return (a + b) / 2; }
一般情况下是没有问题,当a或者b过大,接近于Integer.MAX_VALUE时,就会发生溢出情况。所以一般使用如下代码:
public static int avg(int a, int b) { return a + (b -a) / 2; }
如此就可以防止整数溢出问题了。
还有类似于2个数字交换等,例如:
a = a + b;b = a - b;a = a - b;
一样会产生整数越界问题,直接采用亦或更好一些。
二分查找算法
循环查找
public static int rank(int key, int[] a) { int lo = 0; int hi = a.length - 1; while (lo <= hi) { int mid = lo + (hi - lo) / 2; if (key < a[mid]) hi = mid - 1; else if (key > a[mid]) lo = mid + 1; else return mid; } return -1; }
递归查找
注:
1.方法的第一句包含return语法。
2.递归尝试去解决规模更小的问题。
3.递归调用的父问题和尝试解决的子问题之间不应该有交集存在。(子问题处理数据时,要各自分开处理自己的)
public static int rank(int key, int[] a, int lo, int hi) { if (lo > hi) return -1; int mid = lo + (hi - lo) / 2; if (key < a[mid]) return rank(key, a, lo, mid - 1); else if (key > a[mid]) return rank(key, a, mid + 1, hi); else return mid; }
素数
算法有很多,暂时选择了算法书上的办法,网上还有很多其他的高效办法。
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; }
二进制表示十进制数字
java本身提供了Integer.toBinaryString(N)方法,还有下面的方法。
public static String toBinaryString(int N) { StringBuilder sb = new StringBuilder(); for (int n = N; n > 0; n /= 2) sb.append(n % 2); return sb.reverse().toString(); }
求最大公约数
public static int gcvd(int p, int q) { if (q == 0) return p; int r = p % q; return gcvd(q, r); }
费波纳奇数列
递归调用
public static long F(int N) { if (N == 0) return 0; if (N == 1) return 1; return F(N - 1) + F(N - 2); }
普通调用
public static int f(int N) { if (N == 0) return 0; if (N == 1) return 1; int a = 0; int b = 1; for (int i = 2; i <= N; i++) { b = a + b; a = b - a; } return b; }
0 0
- 算法--基础编程模型
- 算法 Robert Sedgewick 习题答案 1.1 基础编程模型
- 算法第4版 1.1基础编程模型
- [Windows] 基础编程模型
- postsharp编程基础模型
- 1.1 基础编程模型
- 1.1 基础编程模型
- VC 网络编程 基础模型
- 算法(第四版 Robert Sedgewick)课后练习答案 1.1 基础编程模型
- 拜读Robert Sedgewick的《算法 第4版》——1.1基础编程模型
- 算法第一章 1.1 基础编程模型--模块化及重定向管道
- 算法-第四版-1.1 基础编程模型-习题索引汇总
- 第一章 1.1 基础编程模型(我们把描述和实现算法所用到的语言特性、软件库和操作系统特性总称为基础编程模型)
- 编程算法基础
- 算法编程基础
- 网络编程基础:使用SELECT模型
- struts2-面向对象编程重要模型基础
- Linux下C基础编程----系统模型
- C++封装、继承、多态
- Hadoop2.6.0官方MapReduce文档翻译 之 一
- 使用ssh公钥密钥自动登陆linux服务器
- IntelliJ IDEA创建Web SpringMVC项目(一):创建Maven Web项目
- 指针数组和数组指针
- 算法--基础编程模型
- Math.random()取一个区间的随机数
- 标准盒子模型和IE盒子模型
- Hadoop2.6.0官方MapReduce文档翻译 之 二
- android Dialog弹出框对物理按键的响应
- ssh项目中对抛出java.sql.SQLException: No suitable driver异常的处理
- java多线程中的等待唤醒机制--多生产者多消费者问题
- 实现安卓页面的跳转
- MVC的一些个人看法