Advertisement
teodor_dalavera

Преведувач

Dec 23rd, 2017
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.86 KB | None | 0 0
  1. package PreveduvacOBHT;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6.  
  7. class OBHT<K extends Comparable<K>,E> {
  8.  
  9.     // An object of class OBHT is an open-bucket hash table, containing entries
  10.     // of class MapEntry.
  11.     private MapEntry<K,E>[] buckets;
  12.    
  13.     // buckets[b] is null if bucket b has never been occupied.
  14.     // buckets[b] is former if bucket b is formerly-occupied
  15.     // by an entry that has since been deleted (and not yet replaced).
  16.  
  17.     static final int NONE = -1; // ... distinct from any bucket index.
  18.    
  19.     private static final MapEntry former = new MapEntry(null, null);
  20.     // This guarantees that, for any genuine entry e,
  21.     // e.key.equals(former.key) returns false.
  22.    
  23.     private int occupancy = 0;
  24.     // ... number of occupied or formerly-occupied buckets in this OBHT.
  25.    
  26.     @SuppressWarnings("unchecked")
  27.     public OBHT (int m) {
  28.     // Construct an empty OBHT with m buckets.
  29.         buckets = (MapEntry<K,E>[]) new MapEntry[m];
  30.     }
  31.  
  32.  
  33.     private int hash (K key) {
  34.     // Translate key to an index of the array buckets.
  35.         return Math.abs(key.hashCode()) % buckets.length;
  36.     }
  37.  
  38.    
  39.     public int search (K targetKey) {
  40.     // Find which if any bucket of this OBHT is occupied by an entry whose key
  41.     // is equal to targetKey. Return the index of that bucket.
  42.         int b = hash(targetKey); int n_search=0;
  43.         for (;;) {
  44.             MapEntry<K,E> oldEntry = buckets[b];
  45.             if (oldEntry == null)
  46.                 return NONE;
  47.             else if (targetKey.equals(oldEntry.key))
  48.                 return b;
  49.             else
  50.             {
  51.                 b = (b + 1) % buckets.length;
  52.                 n_search++;
  53.                 if(n_search==buckets.length)
  54.                     return NONE;
  55.  
  56.             }
  57.         }
  58.     }
  59.  
  60.  
  61.     public void insert (K key, E val) {
  62.     // Insert the entry <key, val> into this OBHT.
  63.         MapEntry<K,E> newEntry = new MapEntry<K,E>(key, val);
  64.         int b = hash(key); int n_search=0;
  65.         for (;;) {
  66.             MapEntry<K,E> oldEntry = buckets[b];
  67.             if (oldEntry == null) {
  68.                 if (++occupancy == buckets.length) {
  69.                     System.out.println("Hash tabelata e polna!!!");
  70.                 }
  71.                 buckets[b] = newEntry;
  72.                 return;
  73.             }
  74.             else if (oldEntry == former
  75.                     || key.equals(oldEntry.key)) {
  76.                 buckets[b] = newEntry;
  77.                 return;
  78.             }
  79.             else
  80.             {
  81.                 b = (b + 1) % buckets.length;
  82.                 n_search++;
  83.                 if(n_search==buckets.length)
  84.                     return;
  85.  
  86.             }
  87.         }
  88.     }
  89.  
  90.    
  91.     @SuppressWarnings("unchecked")
  92.     public void delete (K key) {
  93.     // Delete the entry (if any) whose key is equal to key from this OBHT.
  94.         int b = hash(key); int n_search=0;
  95.         for (;;) {
  96.             MapEntry<K,E> oldEntry = buckets[b];
  97.            
  98.             if (oldEntry == null)
  99.                 return;
  100.             else if (key.equals(oldEntry.key)) {
  101.                 buckets[b] = former;//(MapEntry<K,E>)former;
  102.                 return;
  103.             }
  104.             else{
  105.                 b = (b + 1) % buckets.length;
  106.                 n_search++;
  107.                 if(n_search==buckets.length)
  108.                     return;
  109.  
  110.             }
  111.         }
  112.     }
  113.  
  114.  
  115.     public String toString () {
  116.         String temp = "";
  117.         for (int i = 0; i < buckets.length; i++) {
  118.             temp += i + ":";
  119.             if (buckets[i] == null)
  120.                 temp += "\n";
  121.             else if (buckets[i] == former)
  122.                 temp += "former\n";
  123.             else
  124.                 temp += buckets[i] + "\n";
  125.         }
  126.         return temp;
  127.     }
  128.  
  129.  
  130.     public OBHT<K,E> clone () {
  131.         OBHT<K,E> copy = new OBHT<K,E>(buckets.length);
  132.         for (int i = 0; i < buckets.length; i++) {
  133.             MapEntry<K,E> e = buckets[i];
  134.             if (e != null && e != former)
  135.                 copy.buckets[i] = new MapEntry<K,E>(e.key, e.value);
  136.             else
  137.                 copy.buckets[i] = e;
  138.         }
  139.         return copy;
  140.     }
  141.    
  142.     public E getValue(K key){
  143.         int b = hash(key);
  144.         return buckets[b].value;
  145.     }
  146. }
  147.  
  148. class SLLNode<E> {
  149.     protected E element;
  150.     protected SLLNode<E> succ;
  151.  
  152.     public SLLNode(E elem, SLLNode<E> succ) {
  153.         this.element = elem;
  154.         this.succ = succ;
  155.     }
  156.  
  157.     @Override
  158.     public String toString() {
  159.         return element.toString();
  160.     }
  161. }
  162.  
  163. class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
  164.  
  165.     // Each MapEntry object is a pair consisting of a key (a Comparable
  166.     // object) and a value (an arbitrary object).
  167.     K key;
  168.     E value;
  169.  
  170.     public MapEntry (K key, E val) {
  171.         this.key = key;
  172.         this.value = val;
  173.     }
  174.    
  175.     public int compareTo (K that) {
  176.     // Compare this map entry to that map entry.
  177.         @SuppressWarnings("unchecked")
  178.         MapEntry<K,E> other = (MapEntry<K,E>) that;
  179.         return this.key.compareTo(other.key);
  180.     }
  181.  
  182.     public String toString () {
  183.         return "<" + key + "," + value + ">";
  184.     }
  185. }
  186.  
  187. public class PreveduvacOBHT {
  188.  
  189.     public static void main(String[] args) throws IOException {
  190.  
  191.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  192.         String expr = br.readLine();
  193.         String[] exp;
  194.        
  195.         int n = Integer.parseInt(expr);
  196.         OBHT<String, String> h = new OBHT<>((int) (n/0.6));
  197.        
  198.         for(int i=0; i<n; i++){
  199.             expr = br.readLine();
  200.             exp = expr.split(" ");
  201.             String mk = exp[0];
  202.             String en = exp[1];
  203.             h.insert(en, mk);
  204.         }
  205.        
  206.         System.out.println(h);
  207.        
  208.         while(!(expr = br.readLine()).equals("KRAJ")){
  209.             String word = expr;
  210.             if(h.search(word) != -1){
  211.                 System.out.println(h.getValue(word));
  212.             }
  213.             else{
  214.                 System.out.println("/");
  215.             }
  216.         }
  217.        
  218.         br.close();
  219.  
  220.     }
  221.  
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement