» »

največkrat pojavljeni element v tabeli

največkrat pojavljeni element v tabeli

lebdim ::

lepo pozdravljeni,

pomagam sosedu pri učenju tabel -> pri programiranju. samo zanima me, kakšen je splošen algoritem za iskanje tistega elementa, ki se v tabeli največkrat pojavi?

ali imam prav: z dvema števcema se sprehajam po tabeli in primerjam vsak element z naslednjim, če sta različna. kako pa naj si zapomni, katere elemente je že pregledal?
  • spremenil: lebdim ()

Vesoljc ::

ne, stevec rabis za vsak element posebaj. ce so to ascii znaki, naredis dodatno tabelo veliko 255 elementov, vrednost znaka pa postane index. sprehodis se cez prvo tabelo, in za vsak znak povecas stevec v drugi tabeli. ko koncas se sprehodis se cez drugo tabelo in najdes tisti index, ki ima najvecjo vrednost. ta index je potem znak, ki se je najveckrat pojavil.
Abnormal behavior of abnormal brain makes me normal...

Blinder ::

tale tabela od lebdima je verjetno sortirana in je mislil on tole izkoristit. sam brezveze toliko komplicirat če je newbie, je lažje za razumet postopek od vesoljca kot izumljat nekaj novega.
99.991% of over-25 population has tried kissing.
If you're one of the 0.009% who hasn't, copy & paste this in your Signature.
Intel i3-12100f gtx 3050 Pismo smo stari v bozjo mater. Recesija generacija

lebdim ::

ne, naloga je sledeča: napiši program, ki vsebuje 20 naključnih števil med 10 in 20. jaz najlažje pišem v pascalu, tako da sem na list papirja napisal trenutno rešitev; tabelo sem pa že napolnil, sedaj moram rešiti zgolj še spodnjo nalogco.

torej, kako bi tle poiskal tisto število, ki se največkrat pojavi?

iz lista papirja prepišem mojo rešitev: t: array[1..20] of integer;

for i:=1 to 20 do
begin
if (t[i] različno t[i+1]) then
begin
st:=t[i];
inc(stevec);
end;
for j:=1 to i do
begin
if (t[j] = t[i]) then
st:=t[j];
end;
end;

Vesoljc ::

za N razlicnih elementov, rabis N veliko tabelo stevcev, pac za vsak element posebaj. kar potem se rabis je nacin kako vrednost elementa preslikat v index.

ce bi imel random stevilke od 0 do 9, bi rabil tabelo 10 elementov, index v tabelo pa bila kar vrednost stevilke. ker pa imas stevilke od 10 do 20 se to rahlo "zakomplicira" :)
hint: tablesize = max - min; tableindex = value - min;
Abnormal behavior of abnormal brain makes me normal...

alexa-lol ::

napiši program ki vsebuje.. kaj to pomeni?

A moraš ti naresti tabelo in notr vržt 20 random elementov med 10 in 20?

table = array(20)

foreach table as element {
table(index)=rand(10,20)
}

Zgodovina sprememb…

lebdim ::

mogoče sem podal malo napačno interpretacijo naloge ...
1. najprej je treba napisati proceduro, ki napolni elemente tabele z naključnimi števili od 10 do 20 (teh elementov je 20)

2. napisati funkcijo, ki bo vrnila najpogostejši element (tisti, ki se največkrat pojavi) iz te tabele ...

prvi del sem napisal, zanima me zgolj drugi del, kako naj se ga lotim ...

amacar ::

2. Narediš si polje velikosti 10 oz 11, če je vključno z 20. Nato pa se sprehodiš čez random polje, in če najdeš recimo 17, povečaš v prvem polju števec 7, če najdeš 20, povečaš števec na mestu 10 itd... nato se sprehodiš čez tabelo in primerjaš enega z drugim dokler ne najdeš največjega števca.

V praksi nekako tako:

int stevci[11]; //inicializiraj na 0
int randomPolje[20];
//napolniš randomPolje

//preštejemo število ponovitev
for(i=0 do velikost randomPolje)
  stevci[randomPolje[i]]++; //tu moraš seveda primerno upoštevati odmik, ali pa narediš polje stevci pač tako veliko da zajame vse elemente, ni pa tako učinkovito

//nato najdeš največji element v polju stevci in tisti se največkrat ponovi

Zgodovina sprememb…

  • spremenil: amacar ()

alexa-lol ::

2 del... narediš 2D tabelo, polje in greš tako

$rand_table = array();
...
napolniš tabelo
...
$count_table = array();

//nastaviš vrednosti vseh 10h celic na 0
for($i = 0; $i < 10; $i++){
$count_table[$i]=0;
}
for($i = 0; $i < sizeof($rand_tabela); $i++){
$count_table[$rand_table[$i]-10]=$count_table[$rand_table[$i]-10] + 1;
}

PHP sintaksa

phyro ::

ubistvu sploh ne rabiš dodatnega polja velikosti N, ker lahko polje z random števili sortiraš po velikosti in ko imaš urejeno greš sam po vrsti od leve proti desni in šteješ

Zgodovina sprememb…

  • spremenil: phyro ()

alexa-lol ::

To je sicer res ampak tistih par bitov je danes nepomembnih v primerjavi s tem da malo bolj zakomplciras vse skupaj.. pa tudi časovno je verjetno potratnejše.

roba87 ::

alexa-lol je izjavil:

To je sicer res ampak tistih par bitov je danes nepomembnih v primerjavi s tem da malo bolj zakomplciras vse skupaj.. pa tudi časovno je verjetno potratnejše.


Am, bo imel kar prav phyro. Kaj pa če mu profesor reče, ko bo zagovarjal : "zdaj pa mi izpiši števila med 0 in 23678?" A bo naredil polje velikosti 23678?

Vesoljc ::

kaj pa ce mu rece, izpisi mi 10 najbolj pogostih? btw, milijon (integer) stevcev je 4MB velika tabela
Abnormal behavior of abnormal brain makes me normal...

amacar ::

Glede hitrosti bo prav z dvema tabelama, ker je to counting sort, zahtevnost O(n). S samo eno tabelo pa ne vem ce bo zahtevnost spravo pod O(nlogn).

phyro ::

seveda bo. Rešitev ki so jo predlagali z eno tabelo ki ma range recimo [0,...23678] je tudi O(n). Prvo v linearnem času povečaš vse števce, in pol najdeš max pravtako v linearnem času. Če si mislil pod O(nlogn) s kakšnim drugim sortom pa ne vem

lebdim ::

a ni O(n log n) v kakšnih heapsortu ?

pac1 ::

Mja jaz bi to zrihtal s slovarjem... Ampak ti ne priporočam, da ga predstaviš prijatelju, ki mu razlagaš uporabo tabel...

Imaš kup rešitev... Meni osebno je všeč rešitev s sortom, ker dejansko problem prevedeš na drugega. In to je v programiranju najbolj pomembno... Če tega ne znaš potem boš nasrkal pri pisanju kode...

Če bo profesor zahteval 10 najbolj pogostih števil mu bo pa programer rekel: "Zaleti se v rit! Nisi dobro definiral problema, ki ga hočeš rešit!"

lebdim ::

@pac1, katero strukturo slovarja bi uporabil? a bi uporabil kopico in na njemu urejanje? bi uporabil kaj drugega?

pac1 ::

V C# bi uporabil nekaj takega:
http://www.dotnetperls.com/dictionary

Pozabi na slovar, če tega ne znaš rešit s tabelo. Seveda govorim iz vidika učenja...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[php] unique random

Oddelek: Izdelava spletišč
141206 (916) Yacked2
»

Namig za rešitev naloge

Oddelek: Programiranje
131683 (1482) vojko20
»

Nasvet - izpis najvisjega stevila

Oddelek: Programiranje
92921 (2624) Keki
»

[C++][Naloga_polja]MIN in MAX polja, izpis za x.100 stevil

Oddelek: Programiranje
222939 (2750) snow
»

Mysql - najbolj pogost

Oddelek: Programiranje
8943 (781) Shershen

Več podobnih tem