Wireless Sensor Networks


Warning: you must not attempt to get help from external sources such as online sites that offer solutions. Any submission for grading must be your own work. You must not copy from others or allow your work to be copied. We will check for similarities of code. Any violation will result in your receiving zero for this project. No exception.


Your report must adequately describe your solutions, such as algorithm design, pseudo code, time complexity etc.


Total points: 10


This lab needs to be completed using Java and is an individual project. Naming of your programs must strictly follow the following convention: (1) one file for each part; (2) Lab2 followed by your Uid and I for part I (for example Lab1U00998499I.java). Upload only your source code (one file for each part) to the Pilot dropbox.


A wireless sensor network consists of autonomous sensors scattered in an environment where they monitor/detect/track objects and conditions such as temperature, sound, and pressure. In this lab, you are going to process information collected by sensor networks to detect possible objects and regions of interest.


The solution time complexity for this lab is an important consideration in grading. Therefore, you should design and implement your solutions carefully. Test cases will exercise your programs thoroughly. Your programs should efficiently handle potentially large problems. Expect that your program produces results for all test cases within 4-5 seconds.



Part I. Object Detection

A sensor network is deployed in a 2D field (a 2D rectangular grid) to detect objects of interest. For ease of data presentation, the collected sensor data is described by an N×N grid of characters. The characters are in the range A…Z. The object could be an animal or a vehicle of some shape or color. Let the characters represent one of 26 possible colors. As the designer of the sensor network, you know roughly what you plan to detect. We define a potential object of interest (POI) as follows. A POI is a rectangular sub-grid (possibly the entire 2D grid) with sides parallel to the sides of the sensor network field which is a square. We stipulate that a POI must not be contained within any other POI. That is, no smaller subset of a POI is also a POI. Additionally, we expect a POI must contain exactly two colors. One of the two colors forms a contiguous region. The other color forms two or more contiguous regions. A real-world case would be to identify vehicles with camouflage. A region is considered to be contiguous if one can traverse the entire region by moving repeatedly from one cell in the region to another cell in the region taking steps up, down, left, or right (diagonals moves are not allowed).

For example, a 2D sensor field may produce sensor data as a rectangle with the following colors




This turns out to be a valid POI because the color C forms a single contiguous region and color B forms more than one contiguous region. In this dataset, we may have detected part of a vehicle.

In Part I, you are asked to write a program to determine the number of potential objects of interest in the given 2D sensor data set.

INPUT FORMAT (file sensor1.txt):

The first line of input specifies the size of the sensor field N (where 1≤N≤20). The field is an NxN square. The next N lines describe the data produced by the sensor network. Each line consists of N colors represented by N characters.

OUTPUT FORMAT (file sensor1out.txt):

Your solution must produce a single integer to indicate the number of potential objects of interest detected in the sensor field.









In the example above, we can detect two potential objects of interest.











Part II. Region of Interest


In Part II, we use the same sensor network to monitor a field. However, the objective is different. Instead of detecting objects of interest, we are interested in finding out the size of regions of interest. As in Part I, we have a sensor field of NxN square cells. Each sensor reports the “status” of a cell using an integer. Neighboring cells (cells either above, below, left, or to the right) reporting the same
“status” form a contiguous region. We do not count diagonal cells with the same “status” as part of the same contiguous region however.

Your task is to write software to determine two things: (1) the size of the maximum contiguous region (i.e., count the number of cells) of the same “status”; (2) the size of the maximum contiguous region that shows two different “status”. This kind of contiguous region must have two different “status”, not just one “status”.

INPUT FORMAT (file sensor2.txt):

The first line of input specifies the size of the sensor field N (where 1≤N≤250). The field is an NxN square of cells. This is followed by N lines. Each of the N lines contains N integers “status” of the sensor reading of the cell (the sensor “status” value is between 0 and 106). The sensor network designer knows that there are at least two different “status” values that will be produced by the sensor network in the sensor field.

OUTPUT FORMAT (file sensor2out.txt):

Produce two pieces of information in two separate lines: (1) the size of the largest contiguous region that shows the same “status”; (2) the size of the largest contiguous region that shows two different “status”.



8 3 9 3

4 9 9 2

9 9 2 7

8 2 2 9