|
[ LakiETF @ 01.05.2007. 15:37 ] @
| Naime,radim domaci zadatak iz Jave ,pa se dugo mucim oko sledeceg:
Trebalo je da napravim slucajni niz od 10000 elemenata. Elementi su cifre 2,3,5,6. Napravio sam to, radi bez problema. Sada je u tom slucajno generisanom nizu, trebalo da se prebroje sve dvojke,trokjke,petice,sestice. Uradio sam to,radi bez problema.
Naredni deo zadatka ne umem da resim. Naime, u istom tom nizu treba prebrojati koliko ima slucajeva da su 22 jedna do druge, 33 jedna do druge, 55 jedna do druge, 66 jedna do druge. Takodje treba prebrojati i slucajeve 222 , 333, 555, 666.
Evo ga kod koji sam ja otkucao. Ako neko ima volje da mi pomogne, cisto da izmenim ,tj. dopunim ovaj kod, pa da ispunim i ove zahteve, to bi bilo lepo od njega.
Kod://
import java.io.*;
import java.util.Random;
class bekap{
public static void main(String args[]){
int Niz []= new int[10000];
double a=0;
double b=0;
double v=0;
double g=0;
double H;
Random rand = new Random();
for(int i =0;i<10000;i++) {
int verovatnoca = (int) (100*rand.nextDouble());
if (verovatnoca < 25){Niz=2;a++;}
else if (verovatnoca<50){
Niz=3;b++; }
else if (verovatnoca<75) {Niz=5;v++;
}
else {
Niz=6;g++;
}
}
H=(a/10000)*Math.log(1/(a/10000))/Math.log(2)+(b/10000)*Math.log(1/(b/10000))/Math.log(2)+(v/10000)*Math.log(1/(v/10000))/Math.log(2)+(g/10000)*Math.log(1/(g/10000))/Math.log(2);
System.out.println("Entropija pocetne sekvence brojeva je:"+H);
}
}
Unapred zahvalan.
|
[ anon315 @ 01.05.2007. 17:36 ] @
Na brzaka sam ovo napisao, valjda nisam pogresio...
Naravno ovo je pod pretpostavkom da se niz od, na primer, 33 33 33, racuna kao da imamo 2 puta uzastopno 33 (prvi put prvu i drugu 33, a drugi put drugu i trecu 33)
Code:
public static void main(String args[]) {
HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
Random rand = new Random();
int prev = 0;
for(int i=0; i<10000; i++) {
int verovatnoca = (int)(100 * rand.nextDouble());
if(verovatnoca / 10 == verovatnoca % 10 && verovatnoca != 0 && verovatnoca == prev) {
if(!hm.containsKey(verovatnoca))
hm.put(verovatnoca, 1);
else
hm.put(verovatnoca, (Integer)hm.get(verovatnoca) + 1);
}
prev = verovatnoca;
}
Set<Entry<Integer, Integer>> set = hm.entrySet();
for(Entry e : set)
System.out.println(e.getKey() + ": " + e.getValue() + " puta.");
}
[ djuxy @ 02.05.2007. 11:06 ] @
Prvo imas gresku. Nije Niz/=2 nego Niz =2.
A ideja za tvoj problem je sledeca:
Code:
for(int i=0;i++;i<10000-1){
ako je Niz[i]==2 i Niz[i+1]==2 tada inkrementiraj brojac22;
ako je Niz[i]==3 i Niz[i+1]==3 tada inkrementiraj brojac33;
ako je Niz[i]==5 i Niz[i+1]==5 tada inkrementiraj brojac55;
ako je Niz[i]==6 i Niz[i+1]==6 tada inkrementiraj brojac66;
}
Analogno primeni za 3 clana niza za 222, 333, 555 i 666.
Pozdrav
------=_Part_890_8032342.1178070275244
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
<br><br><div><span class="gmail_quote">On 5/1/07, <b class="gmail_sendername">LakiETF</b> <<a href="mailto:[email protected]">[email protected]</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Naime,radim domaci zadatak iz Jave ,pa se dugo mucim oko sledeceg:<br><br>Trebalo je da napravim slucajni niz od 10000 elemenata. Elementi su cifre 2,3,5,6. Napravio sam to, radi bez problema. Sada je u tom slucajno generisanom nizu, trebalo da se prebroje sve dvojke,trokjke,petice,sestice. Uradio sam to,radi bez problema.
<br><br>Naredni deo zadatka ne umem da resim. Naime, u istom tom nizu treba prebrojati koliko ima slucajeva da su 22 jedna do druge, 33 jedna do druge, 55 jedna do druge, 66 jedna do druge. Takodje treba prebrojati i slucajeve 222 , 333, 555, 666.
<br><br>Evo ga kod koji sam ja otkucao. Ako neko ima volje da mi pomogne, cisto da izmenim ,tj. dopunim ovaj kod, pa da ispunim i ove zahteve, to bi bilo lepo od njega.<br><br><br><br>Kod://<br><br>import java.io.*;<br>import
java.util.Random;<br><br>class bekap{<br><br>public static void main(String args[]){<br><br>int Niz []= new int[10000];<br>double a=0;<br>double b=0;<br>double v=0;<br>double g=0;<br>double H;<br><br> Random rand = new Random();
<br><br> for(int i =0;i<10000;i++) {<br> int verovatnoca = (int) (100*rand.nextDouble());<br> if (verovatnoca < 25){Niz/=2;a++;}<br> else if (verovatnoca<50){
<br> Niz/=3;b++; }<br> else if (verovatnoca<75) {Niz/=5;v++;<br> }<br> else {<br> Niz/=6;g++;
<br> }<br><br> }<br><br>H=(a/10000)*Math.log(1/(a/10000))/Math.log(2)+(b/10000)*Math.log(1/(b/10000))/Math.log(2)+(v/10000)*Math.log(1/(v/10000))/Math.log(2)+(g/10000)*Math.log
(1/(g/10000))/Math.log(2);<br>System.out.println("Entropija pocetne sekvence brojeva je:"+H);<br>}<br> }<br><br><br><br><br><br><br><br> Unapred zahvalan.<br><br><br>--<br><a href="http://www.elitesecurity.org/p1561295">
http://www.elitesecurity.org/p...r><br>Prijave/odjave: <a href="http://www.elitesecurity.org/liste">http://www.elitesecurity.org/liste</a><br><br>Ne menjajte sledece dve linije ukoliko odgovarate putem emaila!<br>
esauth:258886:c60adff22ca701f348627f87af370689<br>Odgovor pisite *iskljucivo* ispod ove linije:</blockquote><div><br>Prvo imas gresku. Nije Niz/=2 nego Niz=2.<br><br>A ideja za tvoj problem je sledeca:<br>Code: <br>for(int i=0;i++;i<10000-1){
<br> ako je Niz[i]==2 i Niz[i+1]==2 tada inkrementiraj brojac22;<br> ako je Niz[i]==3 i Niz[i+1]==3 tada inkrementiraj brojac33;<br>
ako je Niz[i]==5 i Niz[i+1]==5 tada inkrementiraj brojac55;<br>
ako je Niz[i]==6 i Niz[i+1]==6 tada inkrementiraj brojac66;<br>
}<br></div> <br></div><br>Analogno primeni za 3 clana niza za 222, 333, 555 i 666.<br><br>Pozdrav<br><br>
------=_Part_890_8032342.1178070275244--
[ LakiETF @ 02.05.2007. 17:45 ] @
Hvala ,narode,konacno moj kod radi.
Sada me interesuje samo, sta u ovome kodu treba da izmenim, da bih dobio sledecu funkcionalnost. Naime, posto mi se niz sadrzi od {2, 3, 5, 6},kako u njemu da izbrojim:( a da ne komplikujem for petlju)
pojavu sukcesivnih 2 2( dve cifre 2 jedna posle drruge)
pojavu sukcesivnih 2 3 ( cifra 2 pa posle nje 3)
pojavu sukcesivnih 2 5
pojavu sukcesivnih 2 6
pojavu sukcesivnih 3 2
pojavu sukcesivnih 3 3
pojavu sukcesivnih 3 5
pojavu sukcesivnih 3 6
pojavu sukcesivnih 5 2
pojavu sukcesivnih 5 3
pojavu sukcesivnih 5 5
pojavu sukcesivnih 5 6
pojavu sukcesivnih 6 2
pojavu sukcesivnih 6 3
pojavu sukcesivnih 6 5
pojavu sukcesivnih 6 6.
Takodje, bih voleo da sracunam sve kombinacije za sukcesivne tri cifre, naravno sve kombinacije:
2 2 2
2 2 3
2 2 5
2 2 6
2 3 2
2 3 3
2 3 5
2 3 6
2 5 2
..... i tako redom .
Evo ga kod koji zelim modifikovati.
import java.io.*;
import java.util.Random;
class bekap{
public static void main(String args[]){
int Niz []= new int[10000];
double br222=0, br22=0,a=0;
double br333=0,br33=0,b=0;
double br555=0,br55=0,v=0;
double br666=0,br66=0,g=0;
double H1,H2,H3=0;
Random rand = new Random();
for(int i =0;i<10000;i++) {
int verovatnoca = (int) (100*rand.nextDouble());
if (verovatnoca < 25){Niz=2;a++;}
else if (verovatnoca<50){
Niz=3;b++; }
else if (verovatnoca<75) {Niz=5;v++;
}
else {
Niz=6;g++;
}
}
H1=(a/10000)*Math.log(1/(a/10000))/Math.log(2)+(b/10000)*Math.log(1/(b/10000))/Math.log(2)+(v/10000)*Math.log(1/(v/10000))/Math.log(2)+(g/10000)*Math.log(1/(g/10000))/Math.log(2);
System.out.println("Entropija pocetne sekvence brojeva je:"+H1+"[shannona/simbolu].");
for(int i=0;i<1000;i++){
if( Niz==2 & Niz[i+1]==2) br22++;
else if(Niz==3 & Niz[i+1]==3) br33++;
else if( Niz==5 & Niz[i+1]==5) br55++;
else if( Niz==6 & Niz[i+1]==6) br66++;
}
H2=(br22/10000)*Math.log(1/(br22/10000))/Math.log(2)+(br33/10000)*Math.log(1/(br33/10000))/Math.log(2)+(br55/10000)*Math.log(1/(br55/10000))/Math.log(2)+(br66/10000)*Math.log(1/(br66/10000))/Math.log(2);
System.out.println("Entropija na bazi statistike parova je:" +H2+"[shannona/simbolu].");
for(int i=0;i<1000;i++){
if( Niz==2 & Niz[i+1]==2 & Niz[i+2]==2) br222++;
else if(Niz==3 & Niz[i+1]==3 & Niz[i+2]==3) br333++;
else if( Niz==5 & Niz[i+1]==5& Niz[i+2]==5) br555++;
else if( Niz==6 & Niz[i+1]==6 & Niz[i+2]==6) br666++;
H3=(br222/10000)*Math.log(1/(br222/10000))/Math.log(2)+(br333/10000)*Math.log(1/(br333/10000))/Math.log(2)+(br555/10000)*Math.log(1/(br555/10000))/Math.log(2)+(br666/10000)*Math.log(1/(br666/10000))/Math.log(2);
}
System.out.println("Entropija na bazi statistike trojki je:" + H3+"[shannona/simbolu].");
}
}
Unapred zahvalan.
[ djuxy @ 03.05.2007. 14:06 ] @
>
Laki, Laki....
Radi isto kao i do sad. Tamo gde brojis 22,33, 55 i 66 dodaj jos else if i
postavi ostale kombinacije. Analogno radi za 3 cifre u nizu....
Na kom predetu radis ovakav domaci iz Jave?
------=_Part_25801_25499433.1178197389362
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
<div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">esauth:258886:c60adff22ca701f348627f87af370689<br>
[ LakiETF @ 03.05.2007. 14:54 ] @
Radim na kodovima u telekomunikacijama.
Hvala na savetima.
[ djuxy @ 03.05.2007. 20:20 ] @
>
Obrati paznju da li trebas da prebrojis sve kombinacije 22 ili samo one koje
stoje samostalno. Primer:
niz 6322235 dace ti za brojac22=2 brojac222=1. Da li je to ono sto zelis da
dobijes?
Mozda trebas da dobijes brojac22=0; brojac222=1. Ne znam dovoljno tematiku,
ali mozda bolje odmah da ti skrenem paznju na mogucu gresku.
Pozdrav
------=_Part_32556_32257521.1178219853051
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
<div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">esauth:258886:c60adff22ca701f348627f87af370689<br>
[ LakiETF @ 04.05.2007. 11:21 ] @
E, odradio sam ono ,sve je O.K, trebalo je ispitati par po par u nizu, tako da sam samo promenio inkrement brojaca da se inkrementira za po dva u svakoj iteraciji.
Sada radim drugi domaci, pa te pitam za savet kako ovo treba odraditi, posto sam u manjku sa vremenom.
Izabrati proizvoljni tekst na engleskom jeziku (skinuti sa Internet-a) dužine ne manje od 10000
slova (tekst može da sadrži brojeve, interpunkciju,...). Izvršiti statističku analizu teksta određujući statistiku pojavljivanja pojedinih slova, parova
susednih slova i trojki susednih slova (brojke ignorisati, kao i znake interpunkcije, osim znaka
“blanko”, takođe ne praviti razliku između velikih i malih slova).
Odrediti broj pojavljivanja pojedinih slova ( od slova A do slova Z, parova slova od AA,AB,AC...AZ,BA,BB....BZ,........ZA,ZB,.....ZZ) kao i broj trojki (od AAA,AAB,AAC,......ZZZ) . Znaci treba ucitati tekst, pa sve ovo prebrojati.
Ako imas neku ideju, algoritam,kod ili bilo sta drugo, posalji mi na:
[email protected]
Pozdrav;
[ djuxy @ 04.05.2007. 13:02 ] @
>
Evo ga kod koji sam napisao na brzaka...
Code:
public class Domaci {
public static int parovi[][] = new int[26][26];
public static int trojke[][][] = new int[26][26][26];
/**
* @param args
*/
public static void main(String[] args) {
String str="AAAB";
prebroj(str);
pisi();
}
public static void prebroj(String s) {
Character c1;
Character c2;
Character c3;
int duzina=s.length();
for (int i = 0; i < duzina - 1; i++) {
c1 = s.charAt(i);
c2 = s.charAt(i + 1);
parovi[Character.getNumericValue(c1) - 10][Character.getNumericValue(c2)
- 10]++;
if(i>=duzina-2)continue;
c3 = s.charAt(i + 2);
trojke[Character.getNumericValue(c1) - 10][Character
.getNumericValue(c2) - 10][Character.getNumericValue(c3) - 10]++;
}
}
public static void pisi(){
for(int i=0;i<parovi[0].length;i++){
for(int j=0;j<parovi.length;j++){
System.out.print((char)('A'+(i)));
System.out.print((char)('A'+(j)));
System.out.print(" "+ parovi[i][j]);
System.out.println();
}
}
for(int i=0;i<trojke[0][0].length;i++){
for(int j=0;j<trojke[0].length;j++){
for(int k=0;k<trojke.length;k++){
System.out.print((char)('A'+(i)));
System.out.print((char)('A'+(j)));
System.out.print((char)('A'+(k)));
System.out.print(" "+ trojke[i][j][k]);
System.out.println();
}
}
}
}
}
Ti samo procitaj iz fajla, izbaci sve interpunkcije i pozovi metodu
prebroj(s). Mislim da puno efikasnije resenje od ovoga ne postoji ...
Pozdrav
------=_Part_41978_14905567.1178279976902
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
<div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">esauth:258886:c60adff22ca701f348627f87af370689<br>
[ LakiETF @ 05.05.2007. 14:49 ] @
Hvala, radi odlicno.
[ sendai @ 05.05.2007. 18:58 ] @
djuxy mozes li mi molim te pojasniti ovaj dio tvog koda?
Code:
parovi[Character.getNumericValue(c1) - 10][Character.getNumericValue(c2)
- 10]++;
[ djuxy @ 06.05.2007. 14:15 ] @
>
Pozdrav,
Character.getNumericValue(c1) - vraca numericku vrednost za slova tako da
preslikava A=>10, B=>11,...
U matirci parovi cuvam sve vrednosti od AA do ZZ tako sto red predstavlja
jedno slovo, a kolona drugo. Tako na primer, brojac za par AA se nalazi na
lokaciji parovi[0][0], brojac za vrednost AC u parovi [0][2],...
Zbog toga se oduzima 10 da bi lokacija za A bila 0, za B 1....
Znaci sa ovom linijom inkrementiram brojac za tu kombinaciju slova...
Mozda je zbunjujuca ova metoda getNumericValue(), ali nju sam iskopao
odnekud i prilagodio algoritam njenom radu. Dobro je sto vraca istu vrednost
i za malo i za veliko slovo, tako da se zanemaruje razlika, sto je trazeno u
zadatku
Pozdrav
------=_Part_62224_9507631.1178457145557
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
<div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>esauth:258886:c60adff22ca701f348627f87af370689<br>
[ sendai @ 06.05.2007. 15:21 ] @
e hvala :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|