Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 15 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 25.12.06
Prihlásený: 01.03.13
Príspevky: 239
Témy: 20
Bydlisko: Krásno n/Ky...
Príspevok NapísalOffline : 19.04.2007 14:31

Zdravim.
Chcel by som vediet ako by ste riesili zadanu ulohu. V hociakom jazyku...ide mi o algoritmus. Idealne by bolo keby spracoval danu ulohu v case pod 10 sekund na cca 2,4Ghz procesore

Zadanie
algoritmus

testovacie data (vstup / vystup)
http://knoweurope.eu/rd/test_in-out.zip


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.11.06
Prihlásený: 31.12.07
Príspevky: 677
Témy: 9
Príspevok NapísalOffline : 19.04.2007 17:52

ja osobne by som to robil tak, že si vytovrím dynamické pole záznamov s dvoma hodnotami: string na slovo a integer na jeho počet. Začnem čítať vstup a každé slovo (nájdem ho tak, že zľava aj zprava bude medzera [čiže hladáš text ohraničenými medzerami] a zmažem z neho všetky čiarky, bodky a bodkočiarky) si uložím do nového indexu ak sa ešte nenachádza v poli alebo ak tam už je tak zvýšim jeho výskyt. Nakoniec zoradím pole podľa abecedy, prerátam tie hodnoty a vypíšem


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 25.12.06
Prihlásený: 01.03.13
Príspevky: 239
Témy: 20
Bydlisko: Krásno n/Ky...
Príspevok Napísal autor témyOffline : 19.04.2007 20:44

Hej taq nejak som to riesil..Ale namiesto pola som pouzil datovu strukturu zoznam. Ono je to dost problem ukladat to tam alebo aj do pola pretoze ked vezmes dalsie slovo a porvnavas so slovami v poli, ci uz take existuje musis prejst v najhorsom pripade cele pole...a ten vystup ma 12600 slov. Tak isto to riesi aj ten zoznam a trva to tomu algoritmu 5 minut a to som tam nerobil zoradenie vystupu a ulozenie vystupu do suboru...Idem to skusit s binarnym stromomom...inak tu je kod pre ten 5 minutovy

Kód:
public class ListItem
{

   private String word;
   private int counter;
   private double entropia;
   private ListItem next;
   private ListItem prev;
   
   public ListItem (String word)
   {
      this.word = word;
   }
   
   public String getValue(){
      return word;
   }
   
   public int getCount() {
      return counter;
   }
   
   public void increment() {
      counter++;
   }
   
   public void setEntropia(double entropia) {
      this.entropia = entropia;
   }
   
   public double getEntropia() {
      return entropia;
   }
   
   public void setNext(ListItem li) {
      next = li;
   }
   
   public ListItem getNext() {
      return next;
   }

   public void setPrev(ListItem li) {
      prev = li;
   }
   
   public ListItem getPrev() {
      return prev;
   }
   
}






import java.io.*;
import java.util.*;
import java.math.*;

public class Entropia {
   
   private String input, output;
   private String content = "";
   private String line, token;
   private ListItem li;
   private List l;
   
   public Entropia(String input, String output) {
      this.input  = input;
      this.output = output;
      l = new List();
   }
   
   public void readInput() {
      
      try
      {
         FileReader fr     = new FileReader(input);
         BufferedReader br = new BufferedReader(fr);
      
         while ((line = br.readLine()) != null)
         {
            line    = line.replace('.', ' ');
            line    = line.replace(',', ' ');
            line    = line.replace(':', ' ');
            line    = line.replace(';', ' ');
            line    = line.replace('?', ' ');
            line    = line.replace('!', ' ');
            line    = line.replace("\'", "");
            content = line;
            
            StringTokenizer st = new StringTokenizer(content);
            
            while (st.hasMoreTokens())
            {
               token = (st.nextToken());
               
               l.increment();
               
               if (li == null)
               {
                  li = new ListItem(token);
                  l.insertFirst(li);
                  li.increment();
                  continue;
               }
               else
               {
                  li = l.getStart();
                  while (true)
                  {                     
                     if (li.getValue().equals(token))
                     {
                        li.increment();
                        break;
                     }
                     if (li.getNext() == null)
                     {
                        li = new ListItem(token);
                        l.insertFirst(li);
                        li.increment();
                        break;
                     }
                     else
                     {
                        li = li.getNext();
                        continue;
                     }
                  }
               }   
            }
         }
      }
      catch (IOException e)
      {
         System.out.print("chyba");
      }
   }
   
   public void entropia() {
      li = l.getStart();
      while(true)
      {
         if (li == null)
         {
            break;
         }
         li.setEntropia(Math.log(l.getCount()/li.getCount())/Math.log(2));
         li = li.getNext();
         
      }
      
      
   }
   
   public void test() {
      li = l.getStart();
      System.out.println(li.getEntropia());
      System.out.println(li.getValue());
   }
   
   public static void main(String[] args) {
      Entropia e = new Entropia(args[0],args[1]);
      e.readInput();
      e.entropia();
      e.test();
   }
   
}




public class List {
   
   private ListItem head;
   private ListItem tail;
   private int countAll;
    
    public void insertFirst(ListItem li) {
       li.setNext(head);
       li.setPrev(null);
       head = li;
    }
    
    public void increment() {
       countAll++;
    }
    
    public int getCount() {
       return countAll;
    }
    
    public ListItem getStart() {
       return head;
    }

}


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.11.06
Prihlásený: 31.12.07
Príspevky: 677
Témy: 9
Príspevok NapísalOffline : 19.04.2007 21:40

Urob si 24 (alebo koľko máme písmen) dynamických polí. Potom nemusíš prechádzať 12600 slov alebo ako si to písal ale len niekoľko stovák tých čo majú rovnaké začiatočné písmeno.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 25.12.06
Prihlásený: 01.03.13
Príspevky: 239
Témy: 20
Bydlisko: Krásno n/Ky...
Príspevok Napísal autor témyOffline : 19.04.2007 21:53

heh..mno neviem..alokovat 24 poli...a potom rozhodovat v dakom switchi..to su tiez operaci..ale hej myslim ze by to dako urychlylo


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 25.12.06
Prihlásený: 01.03.13
Príspevky: 239
Témy: 20
Bydlisko: Krásno n/Ky...
Príspevok Napísal autor témyOffline : 04.05.2007 9:41

Tak som to konecne zbuchal :loony:

System asi takyto
Zo vstupneho suboru nacitam v cykle riadoky, tie ocesem o nepotrebne znaky a rozdelim na slova, ktore potom ukladam do stromu..lexikograficky vacsie slovo dolava, mensie doprava a ak sa rovnaju inkrementuje sa pocitadlo v uzli. Rekurzivnim prechadzanim stromu inOrder nastavujem entropia pricom ju aj odrazu zaokruhlujem a aktualne spracovavny uzol zapisem do zoznamu s hodnotami slova, poctu vyskytov a entropie a nasledne ten uzol stromu zmazem. Tak si vlastne prekopirujem cely povodny strom do zoznamu a z toho zoznamu vytvaram druhy strom do ktoreho uz ukladam podla hodnot entropie pricom ak sa hodnoty rovnaju vytvori sa v uzli novy zoznam a prida sa don slovo a pocet jeho vyskytov. Mno a potom uz znovu len prejdem strom inOrder pricom ked v danom uzli existuje zoznam tak ho vypise od zaciatku a samozrejme popritom prebieha zapis do vystupneho suboru....

co sa tyka casu tak mam 2jadrove Centrino (1,66Ghz) a trva to cca 2776 milisekund


Offline

Užívateľ
Užívateľ
algoritmus

Registrovaný: 09.03.07
Prihlásený: 28.07.09
Príspevky: 39
Témy: 7
Bydlisko: Trnava
Príspevok NapísalOffline : 04.05.2007 20:30

: ))) programatori musia mat iq najmenej 150 podla toho co a akym stylom to tu vsetko pisu : ))


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 25.12.06
Prihlásený: 01.03.13
Príspevky: 239
Témy: 20
Bydlisko: Krásno n/Ky...
Príspevok Napísal autor témyOffline : 04.05.2007 21:47

stewe píše:
: ))) programatori musia mat iq najmenej 150 podla toho co a akym stylom to tu vsetko pisu : ))


kde tu pisal daky programator? ukaz som zvedavy ;)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.11.06
Prihlásený: 31.12.07
Príspevky: 677
Témy: 9
Príspevok NapísalOffline : 04.05.2007 22:41

stewe píše:
: ))) programatori musia mat iq najmenej 150 podla toho co a akym stylom to tu vsetko pisu : ))
aj ja by som ho rád videl a pokecal s ním nech sa niečo naučím ;)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 25.12.06
Prihlásený: 01.03.13
Príspevky: 239
Témy: 20
Bydlisko: Krásno n/Ky...
Príspevok Napísal autor témyOffline : 05.05.2007 22:31

...si robte srandu ;)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.11.06
Prihlásený: 31.12.07
Príspevky: 677
Témy: 9
Príspevok NapísalOffline : 05.05.2007 23:29

koho? :)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.05.07
Prihlásený: 10.05.07
Príspevky: 2
Témy: 0
Príspevok NapísalOffline : 10.05.2007 13:36

Ja by som jednoznacne pouzil hasovaciu tabulku, casova zlozitost vyhladavania je konstantna, takze nie je co riesit.Mozno by bol troxu problem s uporiadanim, ale ten sa da zriesit pomocu ukazatelov.
Strom je dobre riesenie, ale nie najlepsie :)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 25.12.06
Prihlásený: 01.03.13
Príspevky: 239
Témy: 20
Bydlisko: Krásno n/Ky...
Príspevok Napísal autor témyOffline : 10.05.2007 22:06

mno co viem tak na vacsi objem dat je lepsi binarny strom..a vyhladavanie v hashovacej tabulke moze trvat taktiez dlhsie ale samozrejme zalezi na mohutnosti tej danej struktury + este to triedenie...ale tak ja som s riesenim spokojny a zadanie som splnil :) dokonca som to skusal na vstupe s 96mb textovym suborom co mal 12milionov slov a frci to do 30 sekund :))) vsetko ma svoje + a -
ako ked posielas nieco na poste a poseru ti to :D


Offline

Užívateľ
Užívateľ
algoritmus

Registrovaný: 10.02.07
Prihlásený: 14.08.09
Príspevky: 255
Témy: 27
Bydlisko: KE
Príspevok NapísalOffline : 11.05.2007 6:01

neslo by to riesit cez DB?

vlozit vsetky tie slova do MySQL databazy, a potom ich zoskupit podla slova, a vratit tiez pocet jednotlivich slov..

aj ked to neriesi tvoj problem, lebo ty sa pytas na algoritmus.







_________________
drahi hackeri! teraz mozete okamzite premazat cely tento server! stlacte skratku ALT+F13
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 25.12.06
Prihlásený: 01.03.13
Príspevky: 239
Témy: 20
Bydlisko: Krásno n/Ky...
Príspevok Napísal autor témyOffline : 11.05.2007 12:00

mno neviem si celkom dobre predstavit ako by som mu to odovzdaval (asi aj s instalackou dakeho sql servera) :)


Odpovedať na tému [ Príspevkov: 15 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie. Algoritmus

v Ostatné

3

785

08.12.2009 18:25

ac.milan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. algoritmus

v Assembler, C, C++, Pascal, Java

11

547

13.12.2010 21:43

ac.milan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Algoritmus

v Ostatné

1

695

14.12.2009 15:13

Draex Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Algoritmus

v Technológia .NET

4

549

09.07.2013 22:35

ThePlaky Zobrazenie posledných príspevkov

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie. algoritmus - datum

v Ostatné

3

558

16.12.2009 12:43

ac.milan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Algoritmus MD5

v PHP, ASP

12

1655

22.11.2008 11:18

Flety Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C ++ algoritmus

v Assembler, C, C++, Pascal, Java

6

527

16.11.2014 18:57

dano123 Zobrazenie posledných príspevkov

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie. Hladám algoritmus

v PHP, ASP

3

364

05.01.2013 17:11

Ďuri Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Algoritmus pomoc

v Ostatné

4

829

04.01.2010 18:43

Shwollo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. algoritmus heeeelp

v Assembler, C, C++, Pascal, Java

6

708

06.12.2007 16:55

tearan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vyvojovy diagram - algoritmus

v Ostatné

3

735

26.11.2010 23:06

Daron Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Geneticky algoritmus - program

v Assembler, C, C++, Pascal, Java

1

551

31.05.2015 2:16

expresado Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Optimalny sifrovaci algoritmus

v Bezpečnosť a firewally

0

637

25.10.2009 15:56

SkyHiRider Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zostavte algoritmus a program

v Assembler, C, C++, Pascal, Java

2

1051

11.05.2007 20:34

jumbo79 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nový algoritmus rozoznávania obrázkov

v Novinky

2

418

12.04.2007 8:15

Numline1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Alexa mení algoritmus merania návštevnosti

v Novinky

14

700

17.04.2008 19:43

pa3ck Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra