JS DSA Flashcards

1
Q

Какво е hash-table как съхраняваме елементи?

A

Хеш таблицата е колекция, която съдържа набор от стойности
computeHash(key) функция изчислява индекс чрез хеширане на ключ. Индексът съответства на position в масив / array, където се съхраняват стойности Перфектна функция за хеширане произвежда същия хеш за същия ключ
Сollide (един ключове, едни и същи хешове)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Каква е сложността на общите операции с хеш таблици?

A

Хеш таблицата има O(1) сложност за операции, базирани на ключове
add()
remove()
get()
update()
Скоростта на обработка на данните не зависи от размера на хеш таблицата

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Какво е алгоритъм за хеширане?

A

computeHash(key) Перфектна функция за хеширане произвежда същия хеш за същия ключ
Produces the same hash for the same key Perfect hashing function
Hashes never collide (different keys, same hashes)
hash=computeHash(‘JohnJamison’);//28782839483 (depends on hash fn)
index=hash%buckets.length;//3

buckets[index]=’JohnJamison’;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Какво е collision? Как можем да разрешим collision?

A

Колизия е ситуация, когато различни ключове имат една и съща хеш стойност
- Стратегии за разрешаване на колизии

  • Записване в съседна клетка
  • Второ хеширане
  • Преоразмеряване - сложна операция

( computeHash(key1) == computeHash(key2) ) за ( key1 != key2 )

Подходи за разрешаване на колизията са:
Chaining in a list
Using the neighboring slots (linear probing)
Re-hashing (second hash function)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Кои са важните характеристики на set?

A

Set– тип абстрактни данни с уникални елементи. при които реда не е определящ Set е нелинейна структура от данни, която имплементира структурата на абстрактните данни Set, обикновено чрез използване на хеш таблица.
Има две характеристики:
1. Елементите са уникални​
2. Редът не е важен.​
Операциите, които можем да използваме с Set , са:​
- add(item) → добавя даден елемент към набора → ​O(1)
- Елементът е добавен някъде, в никакъв ред или място
- не е възможно добавяне на аналогичен елемент - са уникални.
- remove(item) → премахва елемент от набора → ​O(1)
- contains(item) → определя дали елементът е в набора → ​O(1)
- size() → връщане на текущия брой елементи​ → ​O(n)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Дайте пример за алгоритми, които можем да подобрим с помощта на set?

A
Adding elements
constset=newSet();
set.add(1);   // {1}
set.add(2);   // {1,2}
set.add(7);   // {1,2,7}
set.add(7);   // {1,2,7}                                    
Checking 
set.has(1);   // true
set.has(8);   // false                                         
Removing
set.delete(1);   // {2, 7}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Кои са важните характеристики на map?

A

Map е нелинейна структура от данни, която реализира структурата на абстрактни данни Асоцииран масив, обикновено чрез използване на хеш таблица или двоични дървета.
Map е колекция от елементи, където всеки елемент се съхранява като двойка ключ-стойност. Обектът на Map може да съдържа както обекти, така и примитивни стойности като ключ или стойност. Когато превъртаме обекта на Map, той връща двойката ключ-стойност в същия ред, както е добавен. .
Map позволява намирането на стойности чрез дефинирани от потребителя уникални ключове.
Операциите, които можеm да използваme с Map, са:​
new Map()– creates the map.
map.set(key, value)– stores the value by the key. O(1)
map.get(key)– returns the value by the key,undefinedifkeydoesn’t exist in map. O(1)
map.has(key)– returnstrueif thekeyexists,falseotherwise. O(n)
map.delete(key)– removes the value by the key. O(1)
map.clear()– removes everything from the map.
map.size– returns the current element count.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Дайте пример за алгоритми, които можем да подобрим с помощта на map?

A

Имплементиране на hash table с Map class.

Най-използвани функции:
set(key, value) – добавя или актуализира value по даден ключ key
get(key) – връща value или undefined
delete(key) – изтрива key/value pair by key
has(key) – проверява дали даден key съществува
entries() – връща колекция от key/value pairs

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Алгоритъмът

A

Последователност от инструкции, при изпълнението на които се решава определен формулиран проблем. Алгоритъмът е „абстрактно“ описание на процес, което е точно, но общо

Алгоритъмът е правилен ако дава правилен резултат за всички входни данни, при един неправилен отговор за един или повече входни данни е неправилен алгоритъм.
Евристичните алгоритми приближават правилния отговор и имат точност за скорост.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Програма

A

Имплементация на алгоритъм за конкретна машина на конкретен език

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Type of Complexity

A

O(1) - Constant Complexity
O(n) - Linear Complexity
O(n2) - Quadratic Complexity
O(log n) - Logarithmic Complexity O(n3) - Cubic Complexity:
O(n log n) - Linearithmic Complexity: O(2n) - Exponential Complexity
Сложността не е еквивалентна на броя на инструкциите.
Ние се фокусираме върху това как броят на операциите расте с нарастването на входа.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Array

A

Fixed number of contiguous memory cells

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Dynamic Array

A

Array that resizes itself as it grows

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

LinkedList

A

Nodes that reference the next one / each element has a reference to the next one/
Linked List е линейна структура от данни, която implementira абстрактната структура от данни List динамично. Идеята е че всеки елемент знае за съществуване на следващаия елемент или node.
Link list използва повече памет защото има референции елементите се заменят/изтриват /добавят по лесно защото не се налага преинициализиране на индекса както е в арей лист
При Singly linked list елемента има само next знае кой е следващия елемент или node Doubly linked list елемента знае кой е предходния и следващия елемент или node

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Stack

A

LIFO - Стекът осигурява достъп до елемента последен влязъл, първи излязъл. Най-полезно, когато алгоритъмът зависи от такъв достъп (such as DFS, Undo/Redo functionality, the Call Stack).
Функционалност на класа на стека:
- push() - добавя елемент в горната част на стека
- pop() - премахва елемента от горната част на стека
- peek() - връща стойността на горния елемент, без да го премахва
- count - връща броя на елементите в стека
- isEmpty - връща булева стойност, показваща дали стекът е празен
Операциите с данни на тези структури поддържат деструктивно актуализиране когато имаме достъп до елемент ние го премахваме от структурата.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Queue

A

FIFO – allows adding to the tail and removing from the head
Опашката осигурява достъп до елемента първи влязъл, първи излязъл. Най-полезно е, когато алгоритъмът зависи от такъв достъп като such as Scheduling and BFS
Клас на опашка чрез предоставяне на следната функционалност:
- enqueue() - добавя елемент в края на опашката
- dequeue() - премахва елемента от предната част на опашката
- peek() - връща стойността на предния елемент, без да го премахва
- count - връща броя на елементите в опашката
- isEmpty - връща булева стойност, показваща дали опашката е празна” Операциите с данни на тези структури поддържат деструктивно актуализиране когато имаме достъп до елемент ние го премахваме от структурата.

17
Q

Array List

A

Линейна структура от данни, която реализира структурата на абстрактните данни List чрез използване на array/масив.

add(item) → добавя даден елемент в края → O(1)
get(index) → получава елемент с посочения индекс → ​O(1)
insert(index, item) → ​O(n)
remove(index) → премахва елемента в индекс → ​O(n)
size()→ връщане на текущия брой елементи​ → ​O(1)

Array List Клетките на паметта имат еднакъв размер
можем да извършим просто изчисление, за да получим по индекс
бързо се обхожда и намира елемент с константна сложност o(1) Accessing the counter is a constant-time operation
O(1) time complexity
При вмъкване трябва да изместим n клетки от паметта надясно
O(n)

18
Q

Singly linked list - Operation

A

Операциите, към свързания списък, са:​

  • addFirst(value) → създава node отпред​ →​O(1)
  • removeFirst() → премахва първия node​ → O(1)
  • insertAfter(node, стойност) → създава node след даден node → ​O(1)
  • removeAfter(node) → премахва nodeа след даден node → ​​O(1)
  • find(value) → връща първия node с дадената стойност → O(n) функциите и тяхната сложност предполагат единично свързан списък с само препратка към главата.
19
Q

Correctness algorithm

A

An algorithm is correct only if it produces correct result for all input instances
If the algorithm gives an incorrect answer for one or more input instances, it is an incorrect algorithm.

20
Q

Heuristic

A

Algorithms approximate the correct answer and trade precision for speed.

21
Q

Two Observations

A

Given a problem, there may be more than one correct algorithm.
We can measure costs in several ways
In terms of time
In terms of space

22
Q

Algorithm Analysis Overview

A

Predicts the resources the algorithm requires:
Computational time (CPU)
Memory space (RAM)
Communication bandwidth consumption

The running time of an algorithm is:
The total number of primitive operations executed (machine independent steps)
Also known as algorithmic complexity

23
Q

What is a recursion?

A
const recursion = (start, end) => {
console.log(start);
  if (start === end) return;
  recursion(start + 1, end);
};
recursion(5, 10);
Рекурсията е метод, който извиква себе си до достигане на дъно/или запълване на кол стака. Рекурсията разрешава проблеми, които може да се разбият на малки повтарящи се проблеми	Функцията се извика сама  пряко или косвено чрез други методи Tя трябва да има exsit crteria
известен още като дъно, което предотвратява безкрайна рекурсия
24
Q

What is a base case or bottom of a recursion?

A

Call stack структура от данни, която следи коя функцияя се изпълнява в момента и от къде е извикана
Error: Out of stack space (Edge)
InternalError: too much recursion (Firefox)
RangeError: Maximum call stack size exceeded (Chrome)

25
Q

What problems do recursion solves?

A

Рекурсията се използва за комбинаторен алгоритъм, където на всяка стъпка трябва рекурсивно да изследвате повече от едно възможност.​Не използваме рекурсия, когато съществува прост итеративен алгоритъм /цикъл/, когато входът на рекурсивната функция е неизвестен (например зависи от потребителските данни) и вероятно достатъчно голям, за да използва много пространство на стека (причини изключение за препълване на стека

26
Q

пример за рекурсия, която брои извикванията до запълване на Call stack

A
let i = 0;
const recursion = () => {
  i ++;
  recursion();
};
try {
  recursion();
} catch {
  console.log(i);
}
const recursion1 = (i) => {
 recursion1(i + 1);
};
try {
  recursion(1);
} catch {
  console.log(i);
}
const recursion = (i) => {
  if (i === 5) return;дъно- спиране на рекурията 
  console.log(i);
  recursion(i + 1);
};
recursion(1)
27
Q

Обяснете какво е линейна структура от данни.

A

Елементите образуват последователност
От всеки елемент можем да достигнем само до следващия и/или предишния
Двете най фундаментални линейни структури от данни:
Масиви – колекцията е непрекъснат блок от съседни клетки на паметта
Свързани списъци – всеки елемент има препратка към следващия