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;
}
}