Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
orange cablu f.o. - internet fara...

Robinet care comuta traseul

A fost lansata Fedora 40

Samsung S24 plus
 Imi iau un Dell? (Vostro vs others)

Abonati Qobuz?

transport -tren

Platforma electronica de eviden&#...
 Cot cu talpa montat stramb in per...

Sfat achizitie sistem audio pentr...

tavan fals rigips

Ce preferați: produse mai scumpe ...
 Demagnetizare (minimala) ori ba?

Cum pot sa vad pe un proiector pr...

Joc Drone

Dropshipping
 

[TEMA] Subsir suma

- - - - -
  • Please log in to reply
14 replies to this topic

#1
VladBtz

VladBtz

    Active Member

  • Grup: Members
  • Posts: 1,702
  • Înscris: 24.09.2014
se citeste un sir de n numere.sa se scrie numerele care adunate ,dau o suma egal cu nr k.

exemplu
n=10
9 2 7 4 5 10 3 8 1 6   si k =13

10 +3
9+4
7+5 +1
etc...

ma gandeam sa sortez crescator vectorul si apoi cu i=0,i<n-1 si j=i+1;j<n  sa fac o suma care cat timpe mai mica decat k sa adune in ea....nu prea iese

#2
rinser

rinser

    Active Member

  • Grup: Members
  • Posts: 1,606
  • Înscris: 03.11.2010
Lasand la o parte codul sunt si eu curios care e algoritmul. Daca erau doar combinatii de doua numere poate era mai simplu dar fiind si de cate trei si eventual si patru, devine chiar interesant...

#3
Pollux

Pollux

    Mandru ca sunt barbat alb, crestin, heterosexual si liberal-cons

  • Grup: Senior Members
  • Posts: 36,339
  • Înscris: 28.02.2005
x

Edited by Pollux, 24 January 2015 - 19:44.


#4
VladBtz

VladBtz

    Active Member

  • Grup: Members
  • Posts: 1,702
  • Înscris: 24.09.2014

View Postrinser, on 24 ianuarie 2015 - 19:38, said:

Lasand la o parte codul sunt si eu curios care e algoritmul. Daca erau doar combinatii de doua numere poate era mai simplu dar fiind si de cate trei si eventual si patru, devine chiar interesant...

atunci sa zicem ca prima cerinte e pentru perechi d enumere care impreuna dau suma asta,si apoi a doua ceritna pentru 3,4 ,5 etc...

Edited by VladBtz, 24 January 2015 - 19:44.


#5
Pollux

Pollux

    Mandru ca sunt barbat alb, crestin, heterosexual si liberal-cons

  • Grup: Senior Members
  • Posts: 36,339
  • Înscris: 28.02.2005
faci toate aranjamentele de n luate cate k posibile, si vezi care dintre ele iti da suma 13.
n este lungimea vectorului de intrare si k variaza de la 2 la lungimea vectorului de intrare.

cred ca merge asa.

#6
GuyFawkes

GuyFawkes

    Junior Member

  • Grup: Members
  • Posts: 60
  • Înscris: 25.07.2012
Suma de subsir sau de submultime?
Cunosti metoda backtraking?

#7
TorchMan

TorchMan

    Junior Member

  • Grup: Members
  • Posts: 226
  • Înscris: 21.10.2012
Se pot repeta numerele? În exemplul tău ai 10 + 3. Poți avea și 2 + 10 + 1 ?

#8
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014

View PostVladBtz, on 24 ianuarie 2015 - 19:12, said:

ma gandeam sa sortez crescator vectorul si apoi cu i=0,i<n-1 si j=i+1;j<n  sa fac o suma care cat timpe mai mica decat k sa adune in ea....nu prea iese

Nu iti iese, pentru ca daca iti aduna in ea, suma va fi incrementata indiferent de valori. Astfel, daca ai sirul {1, 2, 3, 5, 6, 9} si ai nevoie de valoarea k=7, sa zicem, suma va deveni 1, apoi 3(1+2), apoi 8(3+5), depasind k-ul. Tu ai nevoie de combinatia 2+5.

#9
VladBtz

VladBtz

    Active Member

  • Grup: Members
  • Posts: 1,702
  • Înscris: 24.09.2014
sincer,nu cred ca cea mai optima rezolvare e cu BT

#10
Pollux

Pollux

    Mandru ca sunt barbat alb, crestin, heterosexual si liberal-cons

  • Grup: Senior Members
  • Posts: 36,339
  • Înscris: 28.02.2005

View PostVladBtz, on 24 ianuarie 2015 - 20:27, said:

sincer,nu cred ca cea mai optima rezolvare e cu BT

pai ti-a cerut in enunt sa fie optima?

#11
Redount2k9

Redount2k9

    Member

  • Grup: Members
  • Posts: 374
  • Înscris: 13.07.2010
Pai daca nu vrei Backtracking, bafta cu gasirea unei dinamici.

#12
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Intrebari importante:
  • suma de subsir sau de submultime?
  • se pot repeta numere? / Poate fi refolosit un numar din input?
  • conteaza cata memorie e folosita?
  • elemente negative?
13=13+0
13=12+1
13=11+1+1
13=10+2+1
13=10+1+1+1
...

Asta e cel mai general caz, pur matematic. In functie de raspunsurile la intrebarile de mai sus, poti optimiza via pruning in arborele de decizie. Deci intr-un fel, vei avea oricum backtracking, intrebarea e doar backtracking over what?

Dinamic inseamna ca tii minte subarbori (subsume) calculati anterior. Din nou, cu pruning pentru subsume > k (o suma doar creste, daca nu ai numere negative).

Tot in functie de raspunsurile la toate intrebarile de mai sus, poti apuca altfel problema, incepand de la input, nu de la output.

De aceea e important sa stim raspunsurile la toate cele 4 intrebari.

Edited by OriginalCopy, 24 January 2015 - 22:14.


#13
pathfinder899

pathfinder899

    Member

  • Grup: Members
  • Posts: 318
  • Înscris: 22.06.2013
O idee:
sa zicem ca in v tii minte cele n numere
declari un vector aux in care aux[i] poate fi doar 1 sau 0; generezi toate numerele binare pe n biti si retii in aux[n] bitul din pozitia n; pentru fiecare numar binar pe n biti verifici daca aux[i]==1 atunci suma+=v[i] iar daca aux[i]==0 nu adaugi la suma; apoi verifici daca suma egala cu k.

#14
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,435
  • Înscris: 10.08.2005
@pathfinder899
poti rescrie acele instructiuni intr-un pesudocod?

#15
pathfinder899

pathfinder899

    Member

  • Grup: Members
  • Posts: 318
  • Înscris: 22.06.2013

View PostMarianG, on 25 ianuarie 2015 - 09:42, said:

@pathfinder899
poti rescrie acele instructiuni intr-un pesudocod?

/* mai intai backtracking ca sa generezi in aux numere in format binar; de exemplu pentru n=4 avem aux= 0000,0001,0010... 1111
de exemplu aux=0010 inseamna
aux[0]=0
aux[1]=0
aux[2]=1
aux[3]=0
banuiesc ca se pot genera numerele astea si fara backtracking
dupa care pentru fiecare "numar" binar facem:
*/
sum=0;
for(i=0;i<n;i++)
if(aux[i]==1)
  sum+=v[i];
if(sum == k){
for(i=0;i<n;i++)
  if(aux[i]==1)
   cout<<v[i]<<" ";
cout<<endl;
}

Crezi ca e buna ideea ?

Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate