算法
2023-04-12 15:58:25   0  举报             
     
         
 AI智能生成
  算法
    作者其他创作
 大纲/内容
  基础    
     基础编程模型    
     Java基础    
     Java程序的基本结构  
     原始数据类型与表达式  
     语句  
     简便记法  
     数组  
     静态方法  
     API    
     Java库  
     标准库  
     自己编写的库  
     字符串  
     标准输入/输出    
     命令和参数  
     标准输出  
     格式化输出  
     标准输入  
     重定向与管道  
     基于文件的输入输出  
     标准绘图库(基本方法)  
     标准绘图库(控制方法)  
     二分查找    
     二分查找(Binary Search)也称为折半查找,是一种在有序数组中查找特定元素的算法。该算法每次都将待查找的区间缩小一半,直到找到目标元素或者区间为空为止。  
     数据抽象    
     对象知识(略)  
     背包、队列和栈    
     背包    
     背包是一种不支持从中删除元素的集合数据类型——它的目的就是帮助用例收集元素并迭代遍历所有收集到的元素(用例也可以检查背包是否为空或者获取背包中元素的数量)。    
     public class Stats
{
public static void main(String[] args)
{
Bag<Double> numbers = new Bag<Double>();
while (! StdIn.isEmpty())
numbers.add(StdIn.readDouble());
int N = numbers.size();
double sum = 0.0;
for (double x : numbers)
sum += x;
double mean = sum/N;
sum = 0.0;
for (double x : numbers)
sum += (x - mean)*(x - mean);
double std = Math.sqrt(sum/(N-1));
StdOut.printf("Mean: %.2f\n", mean);
StdOut.printf("Std dev: %.2f\n", std);
}
}
    {
public static void main(String[] args)
{
Bag<Double> numbers = new Bag<Double>();
while (! StdIn.isEmpty())
numbers.add(StdIn.readDouble());
int N = numbers.size();
double sum = 0.0;
for (double x : numbers)
sum += x;
double mean = sum/N;
sum = 0.0;
for (double x : numbers)
sum += (x - mean)*(x - mean);
double std = Math.sqrt(sum/(N-1));
StdOut.printf("Mean: %.2f\n", mean);
StdOut.printf("Std dev: %.2f\n", std);
}
}
 队列    
     先进先出队列(或简称队列)是一种基于先进先出(FIFO)策略的集合类型。    
     子主题  
     栈    
     下压栈(或简称栈)是一种基于后进先出(LIFO)策略的集合类型。    
     子主题  
     集合类数据类型的实现    
     定容栈  
     泛型  
     链表    
     链表是一种递归的数据结构,它或者为空(null),或者是指向一个结点(node)的引用,该结点含有一个泛型的元素和一个指向另一条链表的引用。  
     结构    
     private class Node
{
    Item item;
    Node next;
}  
     操作    
     增删改查    
     在表头插入结点  
     从表头删除结点  
     在表尾插入结点  
     其他位置的插入和删除操作  
     删除指定的结点  
     在指定结点前插入一个新结点  
     遍历    
     for (Node x = first; x ! = null; x = x.next)
{
// 处理x.item
}
    {
// 处理x.item
}
 栈的实现    
     下压堆栈(链表实现)    
     public class Stack<Item> implements Iterable<Item>
{
private Node first; // 栈顶(最近添加的元素)
private int N; // 元素数量
private class Node
{ // 定义了结点的嵌套类
Item item;
Node next;
}
public boolean isEmpty() { return first == null; } // 或:N == 0
public int size() { return N; }
public void push(Item item)
{ // 向栈顶添加元素
Node oldfirst = first;
first = new Node();
first.item = item;
first.next = oldfirst;
N++;
}
public Item pop()
{ //从栈顶删除元素
Item item = first.item;
first = first.next;
N--;
return item;
}
// iterator()的实现请见算法1.4
// 测试用例main()的实现请见本节前面部分
}
    {
private Node first; // 栈顶(最近添加的元素)
private int N; // 元素数量
private class Node
{ // 定义了结点的嵌套类
Item item;
Node next;
}
public boolean isEmpty() { return first == null; } // 或:N == 0
public int size() { return N; }
public void push(Item item)
{ // 向栈顶添加元素
Node oldfirst = first;
first = new Node();
first.item = item;
first.next = oldfirst;
N++;
}
public Item pop()
{ //从栈顶删除元素
Item item = first.item;
first = first.next;
N--;
return item;
}
// iterator()的实现请见算法1.4
// 测试用例main()的实现请见本节前面部分
}
 队列的实现    
     先进先出队列    
     public class Queue<Item> implements Iterable<Item>
{
private Node first; // 指向最早添加的结点的链接
private Node last; // 指向最近添加的结点的链接
private int N; // 队列中的元素数量
private class Node
{ // 定义了结点的嵌套类
Item item;
Node next;
}
public boolean isEmpty() { return first == null; } // 或: N == 0.
public int size() { return N; }
public void enqueue(Item item)
{ // 向表尾添加元素
Node oldlast = last;
last = new Node();
last.item = item;
last.next = null;
if (isEmpty()) first = last;
else oldlast.next = last;
N++;
}
public Item dequeue()
{ // 从表头删除元素
Item item = first.item;
first = first.next;
if (isEmpty()) last = null;
N--;
return item;
}
// iterator()的实现请见算法1.4
// 测试用例main()的实现请见前面
}
    {
private Node first; // 指向最早添加的结点的链接
private Node last; // 指向最近添加的结点的链接
private int N; // 队列中的元素数量
private class Node
{ // 定义了结点的嵌套类
Item item;
Node next;
}
public boolean isEmpty() { return first == null; } // 或: N == 0.
public int size() { return N; }
public void enqueue(Item item)
{ // 向表尾添加元素
Node oldlast = last;
last = new Node();
last.item = item;
last.next = null;
if (isEmpty()) first = last;
else oldlast.next = last;
N++;
}
public Item dequeue()
{ // 从表头删除元素
Item item = first.item;
first = first.next;
if (isEmpty()) last = null;
N--;
return item;
}
// iterator()的实现请见算法1.4
// 测试用例main()的实现请见前面
}
 背包的实现    
     背包    
     import java.util.Iterator;
public class Bag<Item> implements Iterable<Item>
{
private Node first; //链表的首结点
private class Node
{
Item item;
Node next;
}
public void add(Item item)
{ // 和Stack的push()方法完全相同
Node oldfirst = first;
first = new Node();
first.item = item;
first.next = oldfirst;
}
public Iterator<Item> iterator()
{ return new ListIterator(); }
private class ListIterator implements Iterator<Item>
{
private Node current = first;
public boolean hasNext()
{ return current ! = null; }
public void remove() { }
public Item next()
{
Item item = current.item;
current = current.next;
return item;
}
}
}
    public class Bag<Item> implements Iterable<Item>
{
private Node first; //链表的首结点
private class Node
{
Item item;
Node next;
}
public void add(Item item)
{ // 和Stack的push()方法完全相同
Node oldfirst = first;
first = new Node();
first.item = item;
first.next = oldfirst;
}
public Iterator<Item> iterator()
{ return new ListIterator(); }
private class ListIterator implements Iterator<Item>
{
private Node current = first;
public boolean hasNext()
{ return current ! = null; }
public void remove() { }
public Item next()
{
Item item = current.item;
current = current.next;
return item;
}
}
}
 算法分析    
     时间复杂度  
     空间复杂度  
     排序    
     初级排序算法  
     归并排序  
     快速排序  
     优先队列  
     应用  
     查找    
     符号表  
     二叉查找树  
     平衡查找树  
     散列表  
     应用  
     图    
     无向图  
     有向图  
     最小生成树  
     最短路径  
     字符串    
     字符串排序    
     分类    
     低位优先排序    
     Least-Significant-Digit First, LSD  
     高位优先排序    
     MSD  
     键索引计数法    
     步骤    
     频率统计    
     数组统计分组的频率    
     count[]  
     频率转换为索引    
     count[r+1]=count[r]  
     数据分类    
     aux[count[a[i].key()]++] = a[i]  
     回写  
     单词查找树  
     子字符串查找  
     正则表达式  
     数据压缩  
     背景  
     参考资料    
     导读  
    
 
 
 
 
  0 条评论
 下一页