Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedWriter;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.*;
- class Website {
- public int k;
- public int np;
- public Website(int k, int np) {
- this.k = k;
- this.np = np;
- }
- }
- public class Esercizio1 {
- public Website[] websites;
- public ArrayList<Website>[] wl;
- public Random randomMatricola;
- public Random randomChiave;
- public int sizeOfWl;
- public int numeroElementi;
- public int iterazioni_totali_verifica;
- public int numero_richieste_verifica;
- public int iterazioni_totali_inserisci;
- public int numero_richieste_inserisci;
- public Esercizio1() {
- // this.websites = new Website[1000000];
- this.sizeOfWl = 20000;
- this.wl = new ArrayList[sizeOfWl];
- iterazioni_totali_verifica = 0;
- numero_richieste_verifica = 0;
- iterazioni_totali_inserisci = 0;
- numero_richieste_inserisci = 0;
- numeroElementi = 0;
- this.randomMatricola = new Random(922595);
- this.randomChiave = new Random(7105419);
- }
- public void inserisci(int k, int np) {
- if (!this.verifica(k) && k >= 1 && k <= 1000000000 && np >= 1 && np <= 700) {
- Website newWebsite = new Website(k, np);
- int index = k % this.sizeOfWl;
- // non comprendo la differenza tra if ed else nell'add();
- if (this.wl[index] == null) {
- this.wl[index] = new ArrayList<Website>();
- this.wl[index].add(newWebsite);
- } else {
- this.wl[index].add(newWebsite);
- }
- this.numeroElementi++;
- iterazioni_totali_inserisci++; // registro iterazione per caso arraylist nullo
- numero_richieste_inserisci++; // quante volte chiamo la funzione
- }
- }
- public int size() {
- return this.numeroElementi;
- }
- public void stampa_(int k) {
- if (verifica(k)) {
- int index = k % sizeOfWl;
- for (int i = 0; i < this.wl[index].size(); i++) {
- if (wl[index].get(i).k == k) {
- System.out.println("<" + wl[index].get(i).k + ", " + wl[index].get(i).np + ">");
- }
- }
- } else {
- System.out.println("sito non presente");
- }
- }
- public void stampa(int k) {
- int index = k % sizeOfWl;
- for (int i = 0; i < this.wl[index].size(); i++) {
- if (wl[index].get(i).k == k) {
- System.out.println("<" + wl[index].get(i).k + ", " + wl[index].get(i).np + ">");
- }
- }
- }
- public boolean verifica(int k) {
- int index = k % sizeOfWl;
- if (this.wl[index] != null) {
- for (int i = 0; i < this.wl[index].size(); i++) {
- iterazioni_totali_verifica++;
- if (wl[index].get(i).k == k) {
- numero_richieste_verifica++; // incremento per iterazioni
- stampa(k);
- return true;
- }
- }
- }
- iterazioni_totali_verifica++; // accesso per zona di memoria
- numero_richieste_verifica++; // quando chiamo la funzione
- return false;
- }
- public static void main(String[] args) {
- Locale.setDefault(Locale.US);
- Esercizio1 es = new Esercizio1();
- // System.out.println("numero iniziale di elementi inseriti nella struttura
- // dati: " + es.size());
- // Generatore iniziale di coppie con numero di matricola
- int CAP = 300;
- for (int i = 0; i < CAP; i++) {
- int chiave = es.randomMatricola.nextInt(1000000000) + 1;
- int numeroPagine = es.randomMatricola.nextInt(700) + 1;
- // System.out.println(chiave + " " + numeroPagine);
- es.inserisci(chiave, numeroPagine);
- }
- int prev_accessi_verifica = es.iterazioni_totali_verifica;
- String fileName = "output.txt";
- try {
- // Create a FileWriter and BufferedWriter to write to the file
- FileWriter fileWriter = new FileWriter(fileName);
- BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
- // Your loop
- for (int i = 0; i < CAP; i++) {
- int chiave = es.randomChiave.nextInt(1000000000) + 1;
- es.verifica(chiave);
- String line = chiave + " " + (es.iterazioni_totali_verifica - prev_accessi_verifica);
- bufferedWriter.write(line);
- bufferedWriter.newLine();
- prev_accessi_verifica = es.iterazioni_totali_verifica;
- }
- // Close the BufferedWriter to flush and release resources
- bufferedWriter.close();
- System.out.println("Lines written to " + fileName);
- } catch (IOException e) {
- e.printStackTrace();
- }
- // System.out.println("Iterazioni inserisci " + es.iterazioni_totali_inserisci);
- // System.out.println("richieste inserisci " + es.numero_richieste_inserisci);
- // System.out.println("Iterazioni verifica " + es.iterazioni_totali_verifica);
- // System.out.println("richieste verifica " + es.numero_richieste_verifica);
- System.out.println();
- double NMA_verifica = (double) es.iterazioni_totali_verifica / es.numero_richieste_verifica;
- System.out.println("Numero medio di accesi (NMA) per verifica(): " + NMA_verifica);
- // System.out.println("Siti presenti: " + es.size());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment