Table of Contents[Veşartin][Rêdan]
- 1. Hûn Arrayek çawa pênase dikin?
- 2. Rêzên Dînamîk: Çi ne? Çi wan ji Arrayên Bingehîn cuda dike?
- 3. Rêze û ferhengek çawa ji hev diguhere?
- 4. Navnîşa hin feyde û kêmasiyên array.
- 5. "Sparse Array" behsa çi dike?
- 6. Kengê hûn ê navnîşek girêdayî li ser rêzek hilbijêrin?
- 7. Rêzeya îndekskirî ji rêzek hevgirtî çi cûda dike?
- 8. Çi avantajên Heap li ser rêzikên rêzkirî hene?
- 9. Ma em dikarin mezinahiya rêzê wekî neyînî diyar bikin?
- 10. Meriv çawa jimareya têkçûyî di rêzek ji 1 heta 100 hêmanan de cîh digire?
- 11. Meriv çawa îndeksa hêmanekê di rêzikekê de dibîne?
- 12. Hûn çawa dikarin ji hêmanek taybetî ji rêzek xilas bibin?
- 13. Çawa dikare wekheviya du rêzan were verast kirin?
- 14. Dema ku em li ser rêzan dipeyivin, mebesta we ji hevokên "Dîmen" û "Bernivîs" çi ye?
- Kodkirina Pirsên Hevpeyvînê
- 15. Li cotek di rêzek ku berhevoka diyarkirî heye de bigerin
- 16. Rêzkirina rêza binary bi dema xêzikî
- 17. Di arrayekê de hilbera du-int ya herî mezin bibînin.
- 18. Meriv çawa hemî sifirên rêzê heya dawiyê biguhezîne
- 19. Meriv çawa rêzek bi du navnîşên ku di yek operasyonê de têne guheztin rêz dike.
- 20. Meriv çawa du rêzikên rêzkirî di cîh de bi hev re dike.
- 21. Meriv çawa rêzek tiştan di cîhên bilind û nizm de ji nû ve rêz dike?
- 22. Meriv çawa her hêmanek rêzek bêyî karanîna operatorek dabeşkirinê bi hilbera her hêmanek di rêzê de biguhezîne?
- 23. Di dema logarîtmî de hêmana herî cewherî di rêzikekê de bibînin
- 24. Meriv çawa ji bo her hêmanek di rêzek dorveger de hêmana paşerojê ya mezintir bi dest dixe?
- 25. Hejmara berevajîkirina arrayekê bibîne?
- 26. Pirsgirêka Girtina Ava Baranê Çi ye?
- Xelasî
Hevpeyvînên kodkirinê rêzek pirsên DSA-yê hene. Ger hûn ji bo hevpeyivîna xweya teknolojiyê ya pêşeroj bi FAANG an karsaziyek teknolojiya Tier-1 ya din re amade bibin, divê hûn bi arran re jêhatî bin.
Di piraniya hevpeyivînên kodkirinê de, ew di rêza duyemîn de tê Strings. Array komek ji hêmanên daneya têkildar e ku di bîranînê de li nêzê hevûdu têne girtin.
Ji ber ku ew bi hemî zimanên bernamekirinê ve girêdayî ne, wekî C, C++, Java, Python, Perl, û Ruby, ew li her derê ne. Ji bo hin kêşeyên kodkirina pratîkê û pirs û bersivên hevpeyivînê yên li ser bingeha array xwendinê bidomînin.
Python dê di vê postê de were bikar anîn da ku pirsgirêkên kodkirinê çareser bike ji ber ku karanîna wê hêsan e, têgihîştin, û divê ji piraniya me re nas be.
Were em destpêkin.
1. Hûn Arrayek çawa pênase dikin?
- Komek celebên daneyên têkildar arrayek e.
- Array her dem sabît in.
- Heman celeb guhêrbar li çend deveran ji hêla hêmanên array ve têne hilanîn.
- Cûreyên seretayî û referansên objeyê hem bi wê re hevaheng in.
2. Rêzên Dînamîk: Çi ne? Çi wan ji Arrayên Bingehîn cuda dike?
Pîvana otomatîkî ya ku rêzikên dînamîkî (di Java-yê de wekî rêzikên mezinbûyî, rêzikên veguhezbar, rêzikên guhezbar, an ArrayLists jî têne binav kirin) peyda dikin, avantajek girîng e.
Pêdivî ye ku hûn her gav zanibin ku array we dê pêşde çend hêman hilîne ji ber ku array xwedan mezinahiyek sabit in. Ji hêla din ve, rêzek dînamîkî her ku hûn endamên din lê zêde dikin mezin dibe, ji ber vê yekê hûn ne hewce ne ku berê mezinahiya wê ya tam zanibin.
3. Rêze û ferhengek çawa ji hev diguhere?
Ev rêzek bingehîn a pirsên hevpeyivînê ye ku bi rêkûpêk têne pirsîn. Li jêr cudahiyên sereke yên di navbera rêz û ferhengan de hene:
- Array navnîşek rêzkirî ya tiştên mîna hev e. Ji aliyê din ve, ferheng cotên key-nirx hene.
- Mezinahiyên array dikarin dînamîkî biguherînin. Fikrên wiha yên dînamîk di ferhengan de nînin.
- Berî ku arrayek bikar bîne, divê mezinahiya wê were diyar kirin. Mezinahiya ferhengê ne hewce ye ku were xweş kirin.
- Heke hûn dixwazin mezinahiya array berfireh bikin daxuyaniya Redim bikar bînin. Di ferhengan de hêmanek bêyî beyannameyê dikare were zêdekirin.
4. Navnîşa hin feyde û kêmasiyên array.
Feyda:
- Array dikarin bi hevdemî çend hêmanan rêz bikin.
- Yên din avahiyên daneyê, mîna stûn, rêz, navnîşên pêvekirî, dar, grafîk, hwd., dikarin di nav rêzek de bêne bicîh kirin.
- Indeksek dikare were bikar anîn da ku bigihîje hêmanek rêzek.
dezawantajên:
- Pêdivî ye ku mezinahiya array pêşwext were ragihandin. Di dema ragihandina array de, dibe ku em ji mezinahiya ku em hewce ne haydar bin.
- Avahiya array statîk e. Ew tê vê wateyê ku mezinahiya array her gav rast e û veqetandina bîranînê nikare zêde an kêm bibe.
5. "Sparse Array" behsa çi dike?
Rêzeya sparse rêzek daneyê ye ku gelek navnîşên bi nirxên sifir hene. Berevajî vê, rêzek dendikê piraniya tiştên xwe bi nirxên ne-sifir vedihewîne. Indeksên rêzikek sparse, ku jimareyan vediguhezîne tiştan, dibe ku valahiyan bihewîne. Li gorî HashMap-ê, ew bîranîn-bikêrtir in.
6. Kengê hûn ê navnîşek girêdayî li ser rêzek hilbijêrin?
Dema ku navnîşên girêdayî li şûna rêzan bikar bînin, bifikirin:
- Ji bo ku hûn gihîştinek rasthatî hebin ne hewceyî hêmanan in.
- Cihê ku pêşbîniya demkî pêdivî ye, hûn hewce ne ku hûn ji navnîşê werin avêtin û rakirina dem-domdar.
- Ji bo ku hûn rêzek pêşîn çêbikin, dibe ku hûn hewce ne ku tiştan li navenda navnîşê bi cîh bikin.
- Hûn nizanin ku navnîş dê çiqas dirêj be. Ger qebareya rêzê zêde bibe, divê hûn bîranînê ji nû ve ragihînin û dubare bikin, mîna rêzikên hêsan.
7. Rêzeya îndekskirî ji rêzek hevgirtî çi cûda dike?
Cûdahiyên bingehîn ên di navbera rêzikên associative û indexkirî de di tabloya jêrîn de têne navnîş kirin.
- Cotek nirx-kilît di metn an formata hejmarî de ji bo rêzkirina rêzek hevgirtî tê bikar anîn. Bişkojkên rêza îndekskirî hemî hejmar in, û her key bi nirxek cûda ve girêdayî ye.
- Di rêzek hevgirtî de, dibe ku miftek rêzek be. Rêzeya îndekskirî ya bi bişkojkên jimare yên ku ji 0-yê dest pê dikin.
- Tabloyek du-stûnî reftarek rêzek hevedudanî teqlîd dike. Dişibin tabloya yek-stûnî de rêzikên îndekskirî hene.
- Nexşe celebek rêzek hevgirtî ye. Rêzikek index ne nexşeyek e.
8. Çi avantajên Heap li ser rêzikên rêzkirî hene?
Karbidestiya demê ya karanîna Heap li ser Arraysên Rêzkirî feydeya sereke ye. Dema ku operasyonên heap zûtir in, dabeşkirina array gelek dem hewce dike. Komek dikare hêmana herî piçûk bi rengekî berbiçav zûtir ji berhevokek were veqetandin kifş bike.
Berhevokek diyarkirî ya hejmaran dikare bi yek ji du awayan bi karanîna Rêzeyên Rêzkirî were rêz kirin. Ji hêla din ve, ji bo berhevokek diyarkirî ya hejmaran, dibe ku ji yek potansiyel zêdetir hebe.
9. Ma em dikarin mezinahiya rêzê wekî neyînî diyar bikin?
Na, em nikarin jimareyek negatîf wekî mezinahiya rêzek diyar bikin. Ger em ragihînin dê xeletiyek-dema berhevkirinê çênebe. Di dema xebitandinê de, lêbelê, em ê bi NegativeArraySizeException re rûbirû bibin.
10. Meriv çawa jimareya têkçûyî di rêzek ji 1 heta 100 hêmanan de cîh digire?
Tevahiya rêzê bi pêkanîna fonksiyona jêrîn dikare were hesibandin: n (n + 1) / 2
Tenê heke di rêzê de ti dubareyên wê tune be an jî ji yekê zêdetir hejmar winda nebe dê ev fonksiyon kar bike. Ma array hêmanên dubare hene, hûn dikarin rêzê rêz bikin da ku bibînin ka hêmanên hevwate hene yan na.
11. Meriv çawa îndeksa hêmanekê di rêzikekê de dibîne?
Indeksa hêmanek bi lêgerînek xêzik an binar dikare were kifş kirin. Heya ku ew lihevhatina hêmana pêdivî bi cîh bike, fonksiyonek lêgerîna xêzkirî li ser her hêmanek di rêzek de vedigere. Dema ku ew hêmana lihevhatî bi cih bike ew îndeksê vedigerîne. Ji ber vê yekê, tevliheviya demkî ya lêgerîna xêzik O. (n) ye. Hem rêzek rêzkirî û hem jî xêzek nerastkirî dikare lêgerîna xêzik bikar bîne.
Bi karanîna lêgerînek binaryê, ku bi domdarî rêzê di nîvî de dabeş dike heya ku navîniya navberê bi hêmana pêwîst re li hev bike û îndeksê peyda bike, heke rêzik were rêz kirin, hûn dikarin indexa hêmanê bistînin. Ji ber vê yekê, tevliheviya demkî ya lêgerîna binary O. (log n) ye.
12. Hûn çawa dikarin ji hêmanek taybetî ji rêzek xilas bibin?
Ji ber ku hûn nekarin hêmanan ji rêzika orîjînal bi tenê jêbikin ji ber ku ew komikên bi pîvanek diyarkirî ne, hevpeyivîn li we digere ku hûn nêzîkatiyek cûda pêşniyar bikin û bi pirsgirêka ku pirs derdixe re mijûl bibin. Baştirîn qursa çalakiyê ev e ku meriv rêzek nû çêbike da ku hêmanek jê bibe. Hûn dikarin hêmanên ji rêzika yekem a vê rêzê dubare bikin û tenê hêmana ku hûn dixwazin jêbirin têxin nav xwe.
Stratejiyek din peydakirina hêmana armancê di rêzê de û dûv re vegerandina rêza hemî tiştên ku li rastê hêmana armancê ne.
13. Çawa dikare wekheviya du rêzan were verast kirin?
Pêdivî ye ku hûn pêşî dirêjahiya du rêzikên peydakirî verast bikin. Tiştên lihevhatî yên her du rêzikan dema ku dirêjahiya wan wekhev be têne berhev kirin. Her du rêz dê wekî hev bêne hesibandin. eger her cotek pêkhateyan di her peywendiyê de wekhev bin. Ev nêzîkatî nayê şîret kirin ku meriv wekheviya du rêzan kontrol bike ger rêzik bi mezinahî mezin bin ji ber ku ew ê pir dem bigire. Di heman demê de hûn dikarin rêbaza wekhev () ya ku di çîna Arrays de tête bikar anîn bikar bînin, lêbelê, heke hevpeyvîn ji we bixwaze ku hûn du rêzan bêyî karanîna rêbazên çêkirî bidin ber hev, ev rê dê bikêr be.
14. Dema ku em li ser rêzan dipeyivin, mebesta we ji hevokên "Dîmen" û "Bernivîs" çi ye?
"Dimensiyon" a array hejmara nîşanan, an subscripts, pêwîst ji bo naskirina her endamekî takekesî ye. Dibe ku abonet û pîvan ne diyar bin. Pîvanek danasîna rêza bişkokên destûr e, lê aboneyek hejmarek e. Ji bo her pîvanek array tenê yek binnivîsek pêdivî ye.
Mînakî, array arr[10][5] du pîvan hene. Mezinahiyên 10 li ser yek û 5 li ser ya din. Ji bo navnîşana pêkhateyên wê, hûn hewceyê du abonetiyê ne. Her du jî di navbera 0 û 4 de ne; yek di navbera 0 û 9 de, tê de.
Kodkirina Pirsên Hevpeyvînê
15. Li cotek di rêzek ku berhevoka diyarkirî heye de bigerin
Bo nimûne,
Beyan:
- jimar = [8, 7, 2, 5, 3, 1]
- hedef = 10
Karûabr:
- Cot hat dîtin (8, 2)
- Or
- Cot hat dîtin (7, 3)
Beyan:
- jimar = [5, 2, 6, 8, 1, 9]
- hedef = 12
Karûabr:
- Cot nehat dîtin
16. Rêzkirina rêza binary bi dema xêzikî
Di dema xêzikî û li deverek sabît de rêzek binaryê biterkînin. Pêdivî ye ku hilber pêşî hemî sifir, paşê hemî yekan nîşan bide.
Bo nimûne,
- Ketin: {1, 0, 1, 0, 1, 0, 0, 1}
- Derketin: {0, 0, 0, 0, 1, 1, 1, 1 }
Nêzîkbûnek rasterast dê ev be ku meriv hejmara giştî ya rêzê ya 0-an bihesibîne, bêje k, û dûv re k-yên pêşîn ên di rêzê de bi 0-yan û nîşanên mayî jî bi 1-ê tije bikin. Weke alternatîf, em dikarin bihesibînin ka çend 1-an bi tevahî di rêzê de ne. rêza k, k-yên dawîn ên di rêzê de bi 1-ê tije bikin, û yên mayî jî bi 0-yê dagirtî bihêlin.
Nêzîkatiya hatî dayîn xwedan tevliheviyek dema O(n) ye û hilanîna zêde bikar nayîne, ku n mezinahiya têketinê ye.
17. Di arrayekê de hilbera du-int ya herî mezin bibînin.
Berhema herî mezin a du hejmaran di rêzek jimarek de bibînin.
Li ser rêza 10 3 5 6 2 wekî mînakek bifikirin. Cotê (-10, -3) an (5, 6) hilbera herî bilind e.
Bifikirin li ser her kombînasyona hêmanan û fêhmkirina hilbera wan nêzîkatiyek bêaqil e. Ger hilbera cotê heyî ji hilbera herî zêde ya ku heya niha hatî bidestxistin mezintir e, hilbera herî zêde nûve bikin. Hêmanên hilbera dawîn çap bikin.
Çareseriya jorîn, ku n mîqdara têketinê ye, xwedan tevliheviya demê ya O(n2) ye û bêtir cîh nagire.
18. Meriv çawa hemî sifirên rêzê heya dawiyê biguhezîne
Hemî sifirên di nav rêzek jimareyek de heya dawiyê biguhezînin. Pêdivî ye ku bersiv ji karanîna cîhê domdar dûr bixe û rêza têkildar a pêkhateyên rêzê biparêze.
Ketin: {1,2,3,0,8,0,4,7}
Hilber dê bibe {1,2,3,8,4,7,0,0}
Ger hêmana heyî ne sifir be, hêmanê bixin pozîsyona heyî ya jêrîn di rêzê de. Dema ku hêmanên rêzê tev hatin pêvajo kirin, hemî nîşaneyên mayî bi 0-ê dagirin.
Çareseriya pêşîn xwedan tevliheviyek dema O(n) ye, ku n mezinahiya têketinê ye.
19. Meriv çawa rêzek bi du navnîşên ku di yek operasyonê de têne guheztin rêz dike.
Rêzek di dema xêzikê de bi du hêmanên guhezbar û rêzek ku hemî hêmanên wê li gorî rêza hilkişînê hatine rêz kirin rêz bikin. Werhasilî kelam bikin ku array ti dubareyan dihewîne.
Ketin:= [1,9,3,4,7,2] an [9,3,7,2,1,4] an [2,4,1,7,3,9]
Derketin: = [1,2,3,4,7,9]
Ji hêmana duyemîn a di rêzê de dest pê dike, armanc ev e ku meriv her hêmanek bi ya berê re bide ber hev. Helwesta nakokiyê bi girtina du nîşangiran, x, û y, tê hilanîn.
Heke ya berê ji ya paşîn mezintir be, x-ê li ser îndeksa hêmana berê û y-yê jî nîşana hêmana heyî nûve bikin. Heke derkeve holê ku hêmana berê ji hêmana heyî mezintir e, y-yê nûve bikin nîşaneya hêmana heyî.
Di dawiyê de, gava ku me hilberandina her cotek hêmanên cîran qediya, hêmanan li indexên x û y biguherînin.
Ji ber vê yekê ku rêbaza jorîn tenê şanek yekane ya rêzika têketinê ya mezinahiya n pêk tîne, tevliheviya dema wê O(n) ye. Ji bo çareseriyê jûreyek zêde ne hewce ye.
20. Meriv çawa du rêzikên rêzkirî di cîh de bi hev re dike.
Tiştên rêzikên X[] û Y[] -du rêzikên rêzkirî yên her yek bi mezinahiya m û n- bi girtina rêza rêzkirî, ango bi dagirtina X[] bi m hêmanên pêşîn ên herî piçûk û dagirtina Y[] bi hêmanên rêzkirî li hev bikin. hêmanên mayî.
Ger hêmanek di rêza X[] de jixwe li cîhê rast be (ango, ya ku di nav hêmanên mayî de ya herî piçûk e), guh nede wê; Wekî din, wê bi hêmana herî piçûk biguhezînin, ku ew jî dibe endamê yekem yê Y[]. Ji bo ku rêza rêzkirî piştî guheztinê bihêle, hêmanê (niha li Y[0]) veguhezînin cîhê wê yê rast di Y[] de.
Mezinahiya rêza yekem m û mezinahiya rêza duyemîn n e, û tevliheviya demê O(mn) e.
21. Meriv çawa rêzek tiştan di cîhên bilind û nizm de ji nû ve rêz dike?
Rêjeyek jimareyek ji nû ve saz bikin da ku her endamê paşîn ji hêmanên pêşîn û jêrîn mezintir be. Bifikirin ku array ti hêmanên dubare nagire.
Ji bo nêzîkbûnek bi bandor veqetandina array an jî karanîna cîhê zêde ne hewce ye. Plan ev e, ji bo ku dest pê bike, endamê duyemîn ê rêzê û ji bo her dubarekirina loopê bi duyan bilind bibe.
Ger hêmana paşîn ji ya yekem derbas bibe, pêkhateyan biguhezînin. Di heman rengî de, heke hêmana jêrîn ji hêmana heyî mezintir be, her du tiştan biguhezînin. Em ê di dawiya lûkê de rêzika xwestinê ya ku bi tixûbên diyarkirî re tevdigere bistînin.
22. Meriv çawa her hêmanek rêzek bêyî karanîna operatorek dabeşkirinê bi hilbera her hêmanek di rêzê de biguhezîne?
Bêyî ku operatora dabeşkirinê bikar bîne, her hêmanek di rêzek jimareyek de bi hilberîna hemî hêmanên din veguherîne.
Di dema xêz û cîhê domdar de, em dikarin vegerê bikar bînin da ku vê pirsgirêkê çareser bikin. Hesabkirina paşverû ya hilberên her hêmanek di binesaziya rastê de û derbaskirina hilbera binerdeya çepê wekî pîvanên fonksiyonê têgîn e.
Tevliheviya demê O(n) ye.
23. Di dema logarîtmî de hêmana herî cewherî di rêzikekê de bibînin
Ji rêzek hejmarek ku tê de hemî endam ji bilî yek jimarên bûyeran heya, tê de têne dayîn, pirsgirêk ev e ku meriv diyar bike ka ev yek hêman çend caran xuya dike. Di dema logarîtmîkî û cîhê domdar de hêmanên cêwîtî bibînin eger heman hêman di rêzê de bi cot çêbibin û qet nikaribin ji du mînakan zêdetir hêmanek li pey hev bin.
Operasyona XOR dihêle ku em vê pirsgirêkê di dema xêz de çareser bikin. Armanc ew e ku her hêmanek di rêzê de XOR bike. Tenê hêmanên çêdibin piştî ku hêmanên çêdibin hevûdu betal dikin dimînin.
Ev pirsgirêk di dema O(log(n)) de jî dikare were çareser kirin.
24. Meriv çawa ji bo her hêmanek di rêzek dorveger de hêmana paşerojê ya mezintir bi dest dixe?
Divê hêmana din a mezintir ji bo her hêmanek di rêzek jimareyek dorhêl de were cîh. Yekem jimareya herî mezin a piştî hêmanek x di rêzê de, hêmana mezin a paşîn a wê hêmanê ye.
Ji rast ber bi çep, em dikarin li ser hêmanên rêzê bixebitin. Armanc ew e ku em ji bo her hêmanek x-yê bigerin heya ku steck vala nebe an jî li ser wê hêmanek bilindtir hebe. Hêmana mezintir a x-ê ya din saz bikin ku gava ku ew li ser stikê xuya bibe.
25. Hejmara berevajîkirina arrayekê bibîne?
Tevahiya hejmara veguhertinên arrayekê bibînin. Heger ez j) û (A[i] > A[j]) cotek I j) tê binavkirin. Divê em her cotek van di rêzê de bijmêrin.
Hejmarkirina hemî endamên rêzê yên ku ji wê kêmtir in li milê wê û lê zêdekirina encamê li encam nêzîkbûnek rast e.
Vê çareseriyê tevliheviyek O(n2) heye, ku n mezinahiya têketinê ye.
26. Pirsgirêka Girtina Ava Baranê Çi ye?
Dîtina herî zêde ava ku dikare di nav komeke diyarkirî ya baran de bi firehiya yekîneyek her yek jê were girtin, wekî pirsgirêka "barîna baranê" tê zanîn.
Armanc ev e ku hûn bara herî bilind a ku li çep û rastê her barekê were danîn diyar bikin. Kêmtirîn barên pêşeng ên çep û rast, kêmtir bilindahiya barê heyî, mîqdara ava ku li ser her barekê tê hilanîn e.
Xelasî
Li gorî mijarên din ên strukturên daneyê, array hêsantir in. Ji bo ku hûn pirsên hevpeyivîna array ace bikin, hûn hewce ne ku têgihiştinek bingehîn a rêzan hebe.
Pêdivî ye ku hûn bi berfirehî bingehên rêzikan, di nav de operasyonên rêzê (ji daxuyand/çêkirina rêzek heya gihîştin/guheztina hêmanên rêzê) û her weha têgehên bernamekirinê yên mîna lûp, vegerandin, û operatorên bingehîn binirxînin da ku bi serfirazî bersiva pirsên hevpeyivîna array bidin. Pirsgirêk bi tevahî nas bike.
Ger pirsên we hebin divê hûn li zelalkirinê bigerin. Bifikirin ku pirsgirêkê li beşên bêtir rêvebirin dabeş bikin. Berî ku hûn dest bi bernamekirinê bikin, pê ewle bin ku algorîtmaya we di hişê xwe de heye; wê binivisînin an jî di nexşeyek herikandinê de xuya bikin. paşê dest bi nivîsandina kodê bikin.
Leave a Reply