Vous êtes sur la page 1sur 4

Uniwersytet lski

Wydzia Informatyki i Nauki o Materiaach Kierunek Informatyka

Analiza i zoono obliczeniowa algorytmw

Punkt do punktu
Dominika Pawlu

Prowadzcy: dr hab. Urszula Boryczka SWK, poniedziaek 1100

Sosnowiec, 2011

1. Opis problemu:
Zadanie 90 Punkt do punktu Powiemy, e punkt y jest bezporednio osigalny z punktu x, jeli dla ustalonego > 0 odlego d(x,y) od punktu x do punktu y jest mniejsza lub rwna . Dla danego zbioru P punktw na paszczynie powiemy, e y P jest osigalny z x P jeli istnieje taki cig punkw x = p0, p1, ..., pk = y nalecych do P, e pi jest bezporednio osigalny z pi-1 dla i=1,2 , ..., k. Zaproponuj algorytm sprawdzajcy, czy z danego punktu x mona osign punkt y, gdy dane s zbir punktw P, liczba rzeczywista > 0, a funkcja d jest odlegoci midzy dwoma punktami w kartezjaskim ukadzie wsprzdnych.

2. Rozwizanie problemu.
Dane: zbir punktw P, prg > 0, funkcja odlegoci d 2.1 Algorytm sowny: Wybierz ze zbioru P x i y. Utwrz zbir punktw Q, zawiera on bdzie punkty osigalne z punktu x. Dodaj x do Q. Dla kadego punktu q Q wykonuj: Dla kadego pi oblicz warto funkcji d(q, pi), pi P, i=1,2 , ..., k.; o sprawd czy d(q, pi) ; jeeli tak, to sprawd czy pi Q; jeeli pi nie naley do Q, to dodaj pi do Q; sprawd czy pi jest rwny y; o jeeli tak, to zakocz algorytm z informacj Punkt y jest osigalny z x.; 5. Jeeli sprawdzie wszystkie punkty Q zakocz algorytm z informacj Punkt y jest osigalny z x.. 1. 2. 3. 4. 2.2 Kod programu (Java, podstawowy):
import java.util.ArrayList; class Punkt { double x; double y; Punkt() { x = 0; y = 0; } Punkt(double a, double b) { x=a; y=b; } } public class Obliczenia { public static void reachable(Punkt p, int licznik) { for (int i = 0; i < zbior.size(); i++) {

if (odleglosc(p, zbior.get(i)) < e) { if (!x.contains(zbior.get(i))) { x.add(zbior.get(i)); if (zbior.get(i).x == q.x && zbior.get(i).y == q.y) { System.out.println("Q jest osigalny z P"); System.exit(0); } } } } } public static Punkt q=new Punkt(); public static Punkt p =new Punkt(); public static void setP(Punkt p1){ p.x=p1.x; p.y=p1.y; } public static void setQ(Punkt q1){ q.x=q1.x; q.y=q1.y; }

public static double odleglosc(Punkt a, Punkt b) { return Math.sqrt(Math.pow((b.x - a.x), 2) + Math.pow((b.y a.y), 2)); } public static ArrayList<Punkt> x = new ArrayList<Punkt>(); public static ArrayList<Punkt> zbior = new ArrayList<Punkt>(); static double e = 3.5; public static void main(String args[]) { zbior.add(new Punkt(3, 6)); zbior.add(new Punkt(6.1, 4.2)); setP(new Punkt(6.1, 4.2)); zbior.add(new Punkt(7.1, 6.1)); zbior.add(new Punkt(7.2, 2.8)); zbior.add(new Punkt(10, 2.8)); zbior.add(new Punkt(10.1, 8.2)); zbior.add(new Punkt(11.6, 5.7)); zbior.add(new Punkt(13.8, 1.4)); zbior.add(new Punkt(13.9, 3.5)); zbior.add(new Punkt(15.7, 5.7)); zbior.add(new Punkt(16.5, 3.7)); setQ(new Punkt(16.5, 3.7)); zbior.add(new Punkt(17.1, 1.5)); int licznik = 0; x.add((p)); do { reachable(x.get(licznik), licznik); licznik++; } while (licznik < x.size()); System.out.println("Q nie jest osigalny z P"); } }

Objanienia: Klasa Punkt reprezentuje punkt na paszczynie, zawiera zmienne x i y, ktre zawieraj wsprzdne punktu w ukadzie kartezjaskim; Klasa Obliczenia gwna klasa programu; Metoda reachable(Punkt p, int licznik) wykonuje operacje operacje opisane w punkcie 4) algorytmu sownego. Pola Punkt q i Punkt p p odpowiada punktowi x algorytmu, a punkt q punktowi y;

Metody setP(Punkt p1) i setQ(Punkt q1) odpowiadaj za ustawienie wartoci pl q i p; Metoda odleglosc(Punkt a, Punkt b) oblicza warto funkcji d; Pole ArrayList<Punkt> zbior reprezentuje zbir P; Pole ArrayList<Punkt> x reprezentuje zbir Q; 2.3 Zoono algorytmu Zoono pesymistyczna: O( n2); n2 Zoono rednia: O( 1 ); 2 Zoono optymistyczna: O(1);

2.4 Interfejs programu (peny, na pycie):

- wywietla punkty zbioru na paszczynie wraz ze wsprzdnymi; - punkty oznaczone na rowo to p i q; - punkty poczone lini s osigalne z p; - rowa cieka stanowi ciek osigalnoci z p do q (nie jest wywietlana, jeeli punkt nie jest osigalny); - koa oznaczaj zasig ; - automatyczne skalowanie i pozycjonowanie;

Vous aimerez peut-être aussi