普林斯顿算法课第一周作业

本文详细介绍了普林斯顿大学算法课程的第一周编程作业——Percolation问题,涉及基本的数据结构和算法应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Programming Assignment 1: Percolation

作业网址如下:
http://coursera.cs.princeton.edu/algs4/assignments/percolation.html

正文
--------------------------------------------------------------
第一章的作业需要制作两个类
第一个Percolation包含五个方法,主要是用来打开渗漏的格子。
第二个类PercolationStats 同样有五个方法,用来找出N*N格子中,能够产生渗漏的阈值概率的95%置信区间。
先说一下大概的想法和原理。
官网上提供有这道题目的思路,就是在创建格子的过程中首先要在顶层和底层各加一层,
这样的话在测试是否渗漏时直接测试(0,1)和(N+1,1)就好了
首先来说下第一个类:
官网的API已经写好:
public class Percolation {
   public Percolation(int N)               // create N-by-N grid, with all sites blocked
   public void open(int i, int j)          // open site (row i, column j) if it is not open already
   public boolean isOpen(int i, int j)     // is site (row i, column j) open?
   public boolean isFull(int i, int j)     // is site (row i, column j) full?
   public boolean percolates()             // does the system percolate?


   public static void main(String[] args   // test client (optional)
}

1.构造函数 public Percolation(int N)
运用了虚拟节点的方法,把坐标(i,j)转化为(i*N+J),这样能更直观的找到坐标点的位置。
可以直接使用quick-find 和quick-union。
为了实现这个目标,调用WeightedQuickUnionUF创建了一个((N+1)*(N)+N+1)的一位数组。
第零排和第N+1排用来判断是否渗漏,而第零列被整体抛弃。
这样的做法是浪费了一定的存储空间,若非为了查找坐标方便,采用N*N+2个格子也是足够用的。
2.public void open(int i, int j)
判断该点是否打开,如果打开则结束。未打开则与上下左右四个点连接。
3.public boolean isOpen(int i, int j)
只需要返回该点的开闭状态值;
4.public boolean isFull(int i, i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值