[ 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 | 20
Bydlisko: Krásno n/Ky...
NapísalOffline : 19.04.2007 14:31 | algoritmus

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 | 9
NapísalOffline : 19.04.2007 17:52 | algoritmus

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 | 20
Bydlisko: Krásno n/Ky...
Napísal autor témyOffline : 19.04.2007 20:44 | algoritmus

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 | 9
NapísalOffline : 19.04.2007 21:40 | algoritmus

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 | 20
Bydlisko: Krásno n/Ky...
Napísal autor témyOffline : 19.04.2007 21:53 | algoritmus

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 | 20
Bydlisko: Krásno n/Ky...
Napísal autor témyOffline : 04.05.2007 9:41 | algoritmus

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 | 7
Bydlisko: Trnava
NapísalOffline : 04.05.2007 20:30 | algoritmus

: ))) 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 | 20
Bydlisko: Krásno n/Ky...
Napísal autor témyOffline : 04.05.2007 21:47 | algoritmus

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 | 9
NapísalOffline : 04.05.2007 22:41 | algoritmus

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 | 20
Bydlisko: Krásno n/Ky...
Napísal autor témyOffline : 05.05.2007 22:31 | algoritmus

...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 | 9
NapísalOffline : 05.05.2007 23:29 | algoritmus

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 | 0
NapísalOffline : 10.05.2007 13:36 | algoritmus

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 | 20
Bydlisko: Krásno n/Ky...
Napísal autor témyOffline : 10.05.2007 22:06 | algoritmus

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 | 27
Bydlisko: KE
NapísalOffline : 11.05.2007 6:01 | algoritmus

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 | 20
Bydlisko: Krásno n/Ky...
Napísal autor témyOffline : 11.05.2007 12:00 | algoritmus

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


 [ Príspevkov: 15 ] 


algoritmus



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Algoritmus

v Technológia .NET

4

592

09.07.2013 22:35

ThePlaky

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

Algoritmus

v Ostatné

3

815

08.12.2009 18:25

ac.milan

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

algoritmus

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

11

595

13.12.2010 21:43

ac.milan

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

Algoritmus

v Ostatné

1

726

14.12.2009 15:13

Draex

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

algoritmus heeeelp

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

6

743

06.12.2007 16:55

tearan

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

algoritmus - datum

v Ostatné

3

591

16.12.2009 12:43

ac.milan

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

Algoritmus MD5

v PHP, ASP

12

1708

22.11.2008 11:18

Flety

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

C ++ algoritmus

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

6

559

16.11.2014 18:57

dano123

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

Hladám algoritmus

v PHP, ASP

3

409

05.01.2013 17:11

Ďuri

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

Algoritmus pomoc

v Ostatné

4

858

04.01.2010 18:43

Shwollo

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

vyvojovy diagram - algoritmus

v Ostatné

3

786

26.11.2010 23:06

Daron

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

Geneticky algoritmus - program

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

1

597

31.05.2015 2:16

expresado

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

Optimalny sifrovaci algoritmus

v Bezpečnosť a firewally

0

672

25.10.2009 15:56

SkyHiRider

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

Nový algoritmus rozoznávania obrázkov

v Novinky

2

458

12.04.2007 8:15

Numline1

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

Zostavte algoritmus a program

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

2

1088

11.05.2007 20:34

jumbo79

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

ako je obmedzeny tento algoritmus

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

0

318

11.11.2014 18:37

janik12333



© 2005 - 2024 PCforum, edited by JanoF