Мазмунга өтүү

Практикада маалымат структуралары: стектер, кезектер жана Big-O интуициясы

Сабактын башталышы

Практикада маалымат структуралары: стектер, кезектер жана Big-O интуициясы

Тапшырмага туура контейнер тандасаңыз - код тез жана түшүнүктүү болот. Туура эмесин тандасаңыз - маалымат көбөйгөн сайын API жайлап калат.

Негизги идея: маалымат структурасы - бул сизге керектүү операциялар арзан болушу үчүн эстутумда маанилерди уюштуруунун макулдашылган жолу. Стек дайыма эң жаңы элемент менен иштегенде жакшы, кезек - эң эски элемент менен, ал эми хеш-таблица (JavaScript-те бул Map жана Set) - бир нерсени ачкыч боюнча заматта табуу керек болгондо. Ар бир операциянын баасын - анын Big-O - түшүнүү коддун 10 элементте жана 10 миллиондо кандай иштээрин алдын ала айтууга мүмкүндүк берет.
Аягында сиз төмөнкүлөрдү жасай аласыз:
  • стекти (LIFO) ишке ашырып, аны артка кайтаруу тарыхы үчүн колдоно аласыз;
  • кезекти (FIFO) ишке ашырып, аны тапшырма кезеги үчүн колдонуп, shift() тузагынан качасыз;
  • Set / Map заматта издөө, кайталанмаларды жоюу жана санаа үчүн колдоносуз;
  • Big-O белгилөөсүн окуп, интуиция боюнча O(1), O(n) жана O(n^2) айырмалайсыз;
  • кокустан пайда болгон O(n^2) циклин хеш-таблица аркылуу O(n) өтмөгү менен алмаштырасыз.

1. Стек - акыркы киргени биринчи чыгат

Стек - бул үймөк. Сиз push менен үстүнө кошуп, pop менен үстүнөн аласыз. Эң акыркы койгон нерсеңиз - биринчи аласыз: LIFO (Last In, First Out).

Салыштыруу. Табактардын үймөгүн элестетиңиз. Таза табакты үстүнө коёсуз; кийинки аласыз турган табак - дал ошол жаңы койгонуңуз. Ортосунан табак сууруп албайсыз.

Турмуштагы колдонуу: артка кайтаруу тарыхы. Ар бир текст редактору артка кайтаруу стегин сактайт. Ар бир түзөтүү үстүнө коюлат. Ctrl+Z баскандагыда редактор эң акыркы түзөтүүнү алып (pop) аны артка кайтарат. Эң жаңы өзгөртүү дайыма үстүндө болгондуктан, артка кайтаруу - бир арзан pop операциясы.

JavaScript-те кадимки массив мурдатан эле стек болуп саналат: arr.push(x) аягына кошот, arr.pop() аягынан алат, экөө тең O(1) - массивдин өлчөмүнө карабай туруктуу убакыт. Кичине класска ороо операцияларга түшүнүктүү аттарды берет:

class Stack {
  constructor() { this.items = []; }
  push(x)  { this.items.push(x); }
  pop()    { return this.items.pop(); }        // үстүнкүсүн алып + кайтаруу
  peek()   { return this.items[this.items.length - 1]; }  // карап коюу, албай
  get size() { return this.items.length; }
}

Негизги тартип: стек сизге бир гана үстүн кармоого уруксат берет. Бул чектөө - артыкчылык: ал структураны тез, ниетиңизди айкын кармайт.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө