这次是个作业哦!
\documentclass[a4paper]{ctexart}
\usepackage{indentfirst}
\usepackage{listings}
\usepackage{graphicx}
\usepackage{geometry}
\usepackage{float}%%控制图片的相对位置
\usepackage{amssymb}%%导入数学包
\usepackage{color} %%设置字体的颜色
\geometry{left=2.5cm,right=2cm,top=2.5cm,bottom=2.5cm}
\author{软工1班 163x0 mouse}
\title{算法设计第一次作业}
\begin{document}
\maketitle
\noindent {\color{blue}1、铺砖问题的实现}
\hangafter=1\setlength{\hangindent}{2em}输入:预留一块砖和m
\hangafter=1\setlength{\hangindent}{2em}输出:铺砖方案
\lstset{escapeinside=``}
\begin{lstlisting}[language=java,frame=shadowbox]
package test;
/**
*
* @author Mouse
*
*/
import java.util.Scanner;
public class play {
public static int count = 0; // `第count块L型`
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// `特殊方块坐标`
System.out.println("`请给定特殊方块的横坐标:`");
int dr = sc.nextInt();
System.out.println("`请给定特殊方块的纵坐标:`");
int dc = sc.nextInt();
System.out.println("`请给定方盘的边长:`");
int SIZE = sc.nextInt();
int[][] walls = new int[SIZE][SIZE];
walls[dr][dc] = -1;
System.out.println("`覆盖前:`");
show(walls);
wallBoard(walls, 0, 0, dr, dc, SIZE);
System.out.println("`覆盖后:`");
show(walls);
}
/**
*
* @param walls
* @param sr
* `盘左上角编号`
* @param sc
* `盘右上角编号`
* @param dr
* `特殊砖行号`
* @param dc
* `特殊砖列号`
* @param SIZE
* `盘的边长`
*/
public static void wallBoard(int[][] walls, int sr,
int sc, int dr, int dc,int SIZE) {
if (SIZE == 1)
return;
int newSize = SIZE / 2;
int newCount = count;
count++;
/*
* `左上角`
*/
if (dr < sr + newSize && dc < sc + newSize) {
wallBoard(walls, sr, sc, dr, dc, newSize);
} else {
walls[sr + newSize - 1][sc + newSize - 1] = newCount;
wallBoard(walls, sr, sc,
sr + newSize - 1, sc + newSize - 1,newSize);
}
/*
* `右上角`
*/
if (dr < sr + newSize && dc >= sc + newSize) {
wallBoard(walls, sr, sc + newSize, dr, dc, newSize);
} else {
walls[sr + newSize - 1][sc + newSize] = newCount;
wallBoard(walls, sr, sc + newSize,
sr + newSize - 1, sc + newSize,newSize);
}
/*
* `左下角`
*/
if (dr >= sr + newSize && dc < sc + newSize) {
wallBoard(walls, sr + newSize, sc,
dr, dc, newSize);
} else {
walls[sr + newSize][sc + newSize - 1] = newCount;
wallBoard(walls, sr + newSize, sc,
sr + newSize, sc + newSize - 1,newSize);
}
/*
* `右下角`
*/
if (dr >= sr + newSize && dc >= sc + newSize) {
wallBoard(walls, sr + newSize,
sc + newSize, dr, dc, newSize);
} else {
walls[sr + newSize][sc + newSize] = newCount;
wallBoard(walls, sr + newSize, sc + newSize,
sr + newSize, sc+ newSize, newSize);
}
}
private static void show(int[][] walls) {
for (int i = 0; i < walls.length; i++) {
for (int j = 0; j < walls[i].length; j++) {
System.out.printf("%4d", walls[i][j]);
}
System.out.println();
}
System.out.println("---------------------");
}
}
\end{lstlisting}
\begin{figure}[H]
\centering
\scalebox{0.65}{\includegraphics{mouse.png}}
\caption{测试截图}
\end{figure}
\noindent 2、证明题
\hangafter=1\setlength{\hangindent}{2em}{\color{blue}(1) O(f)+O(g)=O(f+g)}
证明:
设F(N)=O(f)则存在正常数C1和 N1使得对所有的N$\geqslant$N1 有F(N)$\leqslant$C1f(N)
设G(N)=O(g)则存在正常数C2和N2使得对所有的N$\geqslant$N2 有G(N)$\leqslant$C2g(N)
令C3=max$\{$C1,C2$\}$,N3=max$\{$N1,N2$\}$,则对所有的N$\geqslant$N3,有
F(N)$\leqslant$C1f(N)$\leqslant$C3f(N);
G(N)$\leqslant$C2f(N)$\leqslant$C3g(N);
故有:
O(f)+O(g)=F(N)+G(N)$\leqslant$C3f(N)+C3g(N)=C3(f(N)+g(N))=O(f+g);
因此有:O(f)+ O(g)= O(f+g)
\hangafter=1\setlength{\hangindent}{2em}{\color{blue}(2) O(f)$\cdot$O(g)=O(f$\cdot$g)}
证明:
设F(N)=O(f)则存在正常数C1和 N1使得对所有的N$\geqslant$N1 有F(N)$\leqslant$C1f(N)
设G(N)=O(g)则存在正常数C2和N2使得对所有的N$\geqslant$N2 有G(N)$\leqslant$C2g(N)
故有:
O(f)$\cdot$O(g)=F(N)$\cdot$G(N)$\leqslant$C1$\cdot$C2$\cdot$f(N)$\cdot$g(N)=O(f$\cdot$g)
因此有 O(f)$\cdot$O(g)=O(f$\cdot$g)
\hangafter=1\setlength{\hangindent}{2em}{\color{blue}(3) 如果g(N)=O(f(N))$\Rightarrow$O(f)+O(g)=O(f)}
证明:
因为g(N)=O(f(N))则存在正常数C1和 N1使得对所有的N$\geqslant$N1 有G(N)$\leqslant$C1f(N)
设F(N)=O(f) 则存在正常数C2和 N2使得对所有的N$\geqslant$N2 有F(N)$\leqslant$C2f(N)
设G(N)=O(g) 则存在正常数C3和N3使得对所有的N$\geqslant$N3
有G(N)$\leqslant$C3g(N)
因此有:
O(f)+O(g)=F(N)+G(N)$\leqslant$C2F(N)+C3G(N)$\leqslant$C2F(N)+C3C1F(N)
令C4=max$\{$C1C3,C2$\}$
原式 $\leqslant$C4F(N)=O(f)
所以有如果g(N)=O(f(N))$\Rightarrow$O(f)+O(g)=O(f)
\hangafter=1\setlength{\hangindent}{2em}{\color{blue}(4) O(cf(N))=O(f(N)) c是正整数}
证明:
设F(N)=O(cf(N)) 则存在正常数C1和 N1使得对所有的N$\geqslant$N1
有F(N)$\leqslant$C1cf(N)即O(cf(N))=O(f(N))
所以等式成立
\hangafter=1\setlength{\hangindent}{2em}{\color{blue}(5) f=O(f)}
证明:
如果存在常数C和自然数N0,使得当N$\geqslant$N0时,有f(n)$\leqslant$Cf(n),
则称函数f(n)当N充分大时上有界,且f(n)是它的一个上界,则有f(n)=O(f(n))
因此 f=O(f)
\end{document}
运行效果为: