Programerski kutak

Sortiranje linked lista je bolje in place nego kad se prespajaju node, nakon sto je lista alocirana tako da u memoriji jedan nod sledi drugi u redosledu liste. Recimo kod mene in-place qsort je 5 puta brzi od merge sorta koji prespaja node ;)
Naravno razlika je manja ako sam nod sadrzi pokazivac na neki drugi podatak.
Takodje traversiranje kroz btree je 10 puta brze nego traversiranje kroz binarno stablo. To je zato sto je cache memorija 10 puta brza od RAM-a i onda se nevidjeno vide efekti gde god je pristup podacima sekvencijalan i gde se moze raditi read ahead.
I na kraju traversiranje linked liste nakon sorta koji prespaja node je daleko sporije nego traversiranje nakon in-place sorta, upravo zbog toga.
 
Ne vidim kako moze O(n) u ovom slucaju. Jedino da sortiras niz pa onda da proveravas xor svakog suseda, posto je najmanji xor kad je najmanja razlika. Jel ovo dovoljno dobro?

Pa nisam ni rekao da treba O(n), rekao sam da moze bolje od O(n^2) :P
U ovom slucaju O(nlogn) zbog slozenosti sortiranja :)

I upravo je to i resenje. Potrebno je doci do zakljucka da ce se minimum sigurno nalaziti izmedju dva susedna elementa, tako da je potrebno urediti elemente ( O(nlogn) ), a onda jednim prolaskom kroz niz proveriti susede i pronaci minimum ( O(n) ). :)

Sto se tice projecteuler, pored njega bih dodao jos par zanimljivih sajtova poput:

interviewbit
codefights
codechef
codingame
spoj
hackerrank
leetcode
exercism

EDIT:

Da nastavimo dalje sa problemima. :)
Dat je niz od n elemenata. Pronaci preovladjujuci element u nizu (element je preovladjujuci ako se pojavljuje strogo vise od n / 2 puta), ili utvrditi da takav element ne postoji.
Algoritam treba da bude slozenosti O(n), i ne sme da koristi dodatni memorijski prostor.
 
Poslednja izmena:
Ne vidim kako slozenost O(n) i bez dodatnog prostora kada ima n' elemenata koji se m' puta ponavljaju. Nemas gde u konstatnom space-u da smestis broj ponavljanja, a ne vidim sumu koja moze da izdvoji maksimalni broj ponavljanja i sam element. Znaci ili O(n^2) ili hash tabela ;p
 
Ne znam da li sam dobro definisao zadatak. Evo primer:

Imas niz [1, 2, 8, 1, 5, 3, 1, 2, 1, 1, 1]

Rezultat algoritma je 1, jer se 1 ponavlja vise od 11/2 puta. :)
Dakle element koji se ponavlja se u nizu mora javiti najmanje n/2 puta ako je niz dimenzije n. :)

Dakle:
Imamo niz, i vazi |niz| = n.
Vratiti x za koje vazi niz.count(x) > n / 2, ako takav element uopste postoji

Postoji algoritam konstantne memorijske slozenosti i linearne vremenske :)
 
Poslednja izmena:
nova_godina_2018.jpg
 
Evo resenja za problem 512 sa euler proojekta ;)
https://projecteuler.net/problem=512
Kod:
import threadpool,times,cpuinfo
{.experimental.}
let factor = countProcessors()*2
proc phi(n:int):int =
  var 
    m = n
    nn = n
  if nn mod 2 == 0 :
    m = m div 2
    while nn mod 2 == 0 :
      nn = nn div 2
  var i = 3
  while i*i <= nn :
    if nn mod i == 0 :
      m = m div i
      m *= i-1
      while nn mod i == 0 :
        nn = nn div i
    i += 2
  if nn > 1 :
    m = m div nn
    m *= nn-1
  return m
proc f(n:int):int =
  if (n and 1) == 0 : return 0
  return phi(n)
proc worker(j,n:int):int =
  for i in countup(1+j,n,factor) :
    result += f(i)
proc g(n:int):int =
  var ts = newSeq[int](factor)
  parallel:
    for j,val in ts.mpairs :
      val = spawn(worker(j,n))
  for i in ts :
    result += i
proc printResult(n:int) =
  let start = cpuTime()
  echo phi(n)
  echo cpuTime()-start
  echo "Input ",n," Result ",g(n)
printResult(100)
printResult(int 5*1e8)

Ovo radi jedno 10 ak minuta na mojoj masini. Postoji mogucnost da se napravi lookup tabela i tad resenje traje oko 20ak sekundi, ali uzima preko 2GB rama minimum.
 
[INFO]

Pozivam sve zainteresovane forumase da slobodno postavljaju zanimljive teme za diskusiju, a vezane su za Racunarstvo i Informatiku.

Ukoliko imate neki zanimljiv problem za resavanje, slobodno ga okacite ovde.
Takodje, bilo bi pozeljno da unapredimo sekciju sa tutorijalima (ja sam juce u sekciju za C++ dodao kratak tekst o pametnim pokazivacima).
To ne mora biti nista opsirno, cak je i pozeljno da bude relativno kratko, jasno i informativnog karaktera, sa linkom ka Veb lokaciji na kojoj zainteresovani citalac moze pronaci detalje.

Bilo bi lepo kad bismo aktivirali ovaj podforum, bilo kakav doprinos se racuna. :)
 
Poslednja izmena:
Imam jedno pitanje koje je zapravo za Oracle DB admin podforum, ali njega nema a ono Software mi je malo sumnjivo. Elem, ako moderatori smatraju da nije za Programiranje (realno i nije) neka prebace na odgovarajuci podforum.

Pitanje se odnosi na backup Oracle SQL baze putem RMAN-a.
Naime, kada se Oracle SQL i RMAN konfigurisu da rade backup koji ukljucuje i control file autobackup, konkretno u mom slucaju je parametar koji to definise ukljucen:

CONFIGURE CONTROLFILE AUTOBACKUP ON;

baza kreira 3 direktorijuma (u okviru direktorijuma sa imenom same baze, ali to nije bitno) pri kreiranju backupa, i to:

- backupset
- archivelog
- autobackup

Backup radim automatski skriptom koji prvo obrise obsolete fajlove, pa onda radi standardan backup database.
Sada dolazimo do mog pitanja/problema. DELETE OBSOLETE komanda u RMAN-u brise stare fajlove iz direktorijuma backupset i archivelog, medjutim ne brise nista u direktorijumu autobackup. A ja hocu da backup bude minimalan potreban, znaci ne zelim da backup-ujem gomilu starih autobackup direktorijuma (zapravo - trebalo bi - gomilu starih control i server parameter fajlova). Ali bih hteo da imam u backupu poslednje (aktuelne) ove fajlove.

- da li da iskljucim parametar CONFIGURE CONTROLFILE AUTOBACKUP ili ipak treba da ga ostavim (buduci da zelim ove fajlove u backupu)?
- da li smem da brisem stare autobackup direktorijume, ili ne bi trebalo jer RMAN vodi o njima racuna (imam setovan Fast Recovery Area)? Ili mogu to da radim, ali da onda ukljucim CROSSCHECK komandu nakon brisanja kako bih konsolidovao evidenciju koju RMAN vodi?

Nadam se da nisam iskomplikovao previse pitanje, ovo ionako moze da odgovori pretezno neko ko se ovim bavio ili bavi. U principu je pitanje vrlo prakticno, pa evo mozda i da ga preformulisem:

da li mogu da dobijem RMAN BACKUP DATABASE komandom ukljucen i backup control and server file-a, a da RMAN brise stari sadrzaj autobackup direktorijuma (kao sto to radi sa backupset i archivelog), ili ako to nije moguce (RMAN nece brisati automatski te stare fajlove) da li smem da ih ja brisem rucno (i eventualno dodam komandu CROSSCHECK kako bi RMAN azurirao svoju tabelu backupovanih fajlova koji su raspolozivi)?

Za kraj samo da napomenem da backup treba da radim dnevno, da baza nije ni preterano velika ni dinamicka (pretezno je staticka), RETENTION POLICY TO REDUNDANCY mi je 1 a RMAN OUTPUT TO KEEP FOR 2 DAYS, nema nikakvih komplikacija sa inkrementalnim backupima... Znaci treba mi obican backup koji ukljucuje i control&server file, cuvam sve samo 1 dan i ne zelim stare nepotrebne autobackup fajlove (koji se iz nekog razloga ne brisu - ili ja nesto zestoko masim u nacinu rada RMAN-a).

Unapred hvala.
 
Poslednja izmena:
Pozdrav svima! Već nekoliko dana imam problema sa InstallShield-om. Pre nekoliko dana sam pri podizanju sistema na desktop-u primetio potpuno prazan prozor sa natpisom InstallShield Update... i ubrzo sam shvatio da imam velikih poteškoća pri upotrebi Google Chrome-a, npr. usporen rad, pomalo izmenjena početna stranica, poremećen search box, pri prevlačenju kursora preko linkova nema highlight-a, niti promene boje na ljubičasto za one stranice koje sam već posetio itd. U početku nijedan program nije hteo da se učita, potom me je pri pokušaju pristupanja Chrome obavestio da nema Internet konekcije, ali su se stvari nakon nekoliko restartova, koliko-toliko, unormalile. Ubrzo sam shvatio da ukoliko odem u Task Manager i izaberem opciju End Task za InstallShield, sve se vraća u normalu, bez ikakvih naknadnih problema. Isti problem se javlja pri svakom ponovnom uključenju računara. Znam da ovo ne zvuči kao preveliki problem, a ionako ga imam tek nekoliko dana unazad, ali bi mi svaki odgovor puno značio, pošto znam da ovaj program vodi računa o svim update-ovima. Inače, redovno i temeljno proveram svoj računar u potrazi za bilo kakvim malverima, adverima itd. tako da sam tu opciju odbacio nakon otklanjanja čak i ono malo potencijalno opasnih fajlova. Trenutno koristim Windows 10 Pro, 64-bitni. Hvala unapred!
 
Update: Rešio sam problem sa InstallShield-om skoro istog dana koristeći program Autoruns. Kasnije sam upotrebio Malwerbytes koji je uklonio neki fajl vezan za ovaj program, tako da mislim da više nema potrebe za Autoruns-om. Pozdrav!
 
Da se napravi CRM da li je bolje raditi ga u PHP (Laravel) ili NodeJS? Ako neko ima iskustva sa tim mogla bi i neka pomoc sta je osnovno sta CRM treba da ima ili neka struktura baze...?

Vidi, CRM je vrlo sirok pojam (ako oboje mislimo na Customer-Relationship-Managemen). Implementacija istog zavisi iskljucivo od 2 stvari:
1. Sta zelis da omogucis
2. Sta ti je na raspolaganju.
Kojom tehologijom ces ga implementirati (tacnije, kojim tehnologijama, jer jedan CRM sistem zahteva kombinaciju dosta toga), je tvoj izbor, koji se uklapa u ovo dvoje gore.
Treba da razmisljas u smislu, sta ces da "izlozis" svojim customer-ima: web servse, full-stack resenja, ili nesto trece? Od svega toga ti zavisi i sta ces odabrati kao tehnologiju implementacije.

Moj trenutni zadatak u firmi jeste, upravo, da gomilu raznih funkcionalnosti naseg unutrasnjeg CRM sistema izlozim nasim novim partnerskim kompanijama (koji su iz mog ugla customeri), i odredjenim specijalim klijentima, i to radimo putem web servisa (tehnologija je potpuno nebitna, mi smo se opredelili za .NET, ali isto tako mogu biti implementirani u bilo cemu).

Ono sto jedan CRM mora da ima, to je, definitivno, baza podataka, i odredjeni storage system. I ono sto ce CRM obezbediti customer-ima, jeste odredjene operacije nad podacima u bazi i na storage sistemu, putem nekih aplikacija. To moze biti i kombinacija nekih cloud resenja...ma, bukvalno, igra bez granica :)

Nabacao sam ovde gomilu opstih stvari, konkretnije ti mogu pomoci ako das odgovor na dva pitanja odozgo: sta zelis da izlzis, i sta imas na raspolaganju.
 
Trebalo je u prvom pitanju da stavim sta neki osnovni CRM treba da ima, ovako sad moram :) Za pocetak bi nesto osnovno. Podaci o zaposlenima, musterijama, partnerima... Mogucnost notifikacija i slanja mejlova. neku beleznicu, kalendar i ne znam sta jos spada u osnovno...
 
Jedna od najvaznijih pitanja u specifikaciji je "Ko je korisnik?Desktop aplikacija, ili web browser?
Zatim, kako korisnik pristupa nasim CRM servisima: sa lokala (unutar lokalne LAN mreze) ili remote (http, https, ftp...)?

Ono sto je standardno i za najelementarniji CMS je da mora imati bazu podataka, neke web servise, i neke klijentske aplikacije (web, desktop, ili oboje).
Iako prica oko CRM (odnosno, ERP sistema) izgleda nekomae lagana i naivna, zapravo je rec o vrlo kompleksnim resenjima.
Za pocetak, savetujem ti sledece:
1. Definisi grupe poslova (kalendar i mailing je jedna grupa, vodjenje evidencije korisnika, racuni, placanja je druga grupa, i tako dalje).
2. Kreiraj bazu podataka hde ces smestiti sve to.
3. Definisi storage system - gde i kako ces smestati fajlove generisane tvojim CRM-om i kako ce se njima pristupati.
4. Kreiraj web servise - jedan web servis za svaku grupu poslova definisanu u prvoj tacki. Ovo je ujedno i najvaznija stvar - ovde ce se nalaziti najveci deo poslovne logike, kao i data access level. Posebnu paznju moras da obratis oko bezbednosti: ssl, autentikacija korisnika, tokeni, sesije, i gomila drugih stvari.
I na samom kraju, radis klijente.

Ovakav pristup, preko web servisa, preporucujem zbog skalabilnosti i zbog potencijalne komercijalne upotrebe.

Recimo, mi sada ekspozujemo neke, do nedavno, interne funkcionalnosti, partnerima. I neki zele full stack resenje, dok drugi zele samo web servis, pa ce ga oni sami pozivati iz svojih klijentskih aplikacija.
CRM ti je igra bez granica - i super sto je tako - inace nas posao bi bio mnogo dosadan ;)
 
Za pocetak, jako lep primer. Ne moze da skodi da se vezba uz ovo.
Ali jedna realna upotreba, zahtevala bi daleko kompleksniju arhitekturu, pre svega oko autentikacije i autorizacije.
Ali o tom potom - za pocetak, ovo ke fino.
 

Back
Top