2 mins into the video, I already know the DS and Algo to be used. Amazing video!
@ajutamang6424 жыл бұрын
my CS degree < Tech Dose Content. Keep making sir. I love the content and easy to understand the concepts.
@techdose4u4 жыл бұрын
Thanks
@ArbindYadav-oc3zg4 жыл бұрын
Damn True 😂😂
@techdose4u4 жыл бұрын
😅
@paragmahajan274 жыл бұрын
@@techdose4u Yes. This is very good and great explanation within 10 mins. Pls keep adding such puzzles/algorithms etc, thanks
@user32132x3 жыл бұрын
India me teri CSE ke degree mere chaddi se bhi kam value rakhti hai
@marhawk64683 жыл бұрын
Bravo once again, I never got a CS degree so I missed out on a lot. your videos are a blessing!
@techdose4u3 жыл бұрын
Thanks
@idgaf763 жыл бұрын
actually u r pretty gr8 to be a teacher...absolutely amazing
@techdose4u3 жыл бұрын
Thanks :)
@saikrishnamohith20005 ай бұрын
Please correct me if i am wrong, Considering n=cache size and q=query size Even in hash approach the case where there is a page hit to remove the hitted node and keep it at the rear position it takes O(n) ,so for shifting in this case it takes O(n) and searching O(1) so considering time complexity is calculated referring to worst time complexity ,it takes O(n*q) time complexity even using the hash approach 😅
@SatishKumar-jb9qm4 жыл бұрын
I like the approach presented to arrive at the final solution - thank you for making this video.
@techdose4u4 жыл бұрын
Welcome
@piyushagarwal32624 жыл бұрын
I love your way of teaching. Made all my doubts clear.
@techdose4u4 жыл бұрын
Thanks
@hangoutwithabhi3 жыл бұрын
Instead of HashMap we can use Set to store current elements keep updating that on any change with O(1). Searching would also be O(1).
@adeshpandey69893 жыл бұрын
Get is linear operation on set
@hariprasadcr59363 жыл бұрын
Awesomeee...... I've been searching for this everywhere, and the explanation was amazing..... hats off man
@techdose4u3 жыл бұрын
Thanks :)
@GauravSingh-bo1ys4 жыл бұрын
This is gold. Thank you very much for this.
@techdose4u4 жыл бұрын
Welcome :)
@yasvidobariya12474 жыл бұрын
Compare to other channel techdose is underrated...It never happens that i watched your video and feel like wasted time..u are awesome.
@techdose4u4 жыл бұрын
Thanks bro :)
@sureshgarine2 жыл бұрын
awesome explanation. Thank you, sir, felt like remembered OS class in college, of course, this is better than that
@hackytech74944 жыл бұрын
Thank you so much for such a wonderful explanation
@techdose4u4 жыл бұрын
Welcome 😁
@aneksingh44964 жыл бұрын
Nice but I believe u missed the last part in which we have to shift the requested page to the rightmost if gets found in cache
@techdose4u4 жыл бұрын
Yes I missed it. Might have mentioned in someone's comment 😅
@akshay_g4 жыл бұрын
Knowledge sharing was good in session. Thanks
@techdose4u4 жыл бұрын
Welcome :)
@Sunny-qq6un3 жыл бұрын
thanks man , now I am able to solve this question by your helps.
@randomcommentor70012 жыл бұрын
Brilliant video. Loved the way you explained optimisation stepwise. Thanks. Also, no unnecessary comments. Strictly content.
@techdose4u5 ай бұрын
Thanks
@najimali324 жыл бұрын
Approach is good sir. Writing code in DLL will be lengthy & more difficulty in handling boundary cases.Instead we can use queue ,code will be very compact & easy to handle. Sir please also make videos on DP question.
@techdose4u4 жыл бұрын
Actually this is just for understanding. We will use Deque for this. Internally implementation will be optimized as explained :)
@najimali324 жыл бұрын
@@techdose4u okay sir.
@neharikakhera64114 жыл бұрын
Most rearly found explanation
@techdose4u4 жыл бұрын
Thanks
@kautukraj2 жыл бұрын
Very helpful, thank you.
@ss-xh3hf4 жыл бұрын
thanks for showing how to optimize step by step
@techdose4u4 жыл бұрын
Thanks :)
@mahipalsingh-yo4jt4 жыл бұрын
very clear and well defined explanation. Thank you..........
@techdose4u4 жыл бұрын
Welcome
@aditya2345674 жыл бұрын
You didn't mention about updating an existing value, during which we erase existing node even if its in middle of linked list and put it in the front. This erase takes O(n)
@ShashankKumar-hq2cm3 жыл бұрын
Yaa it will still take O(N) time complexity in this approach to, because you need to reach that particular position and than remove it.And than further add it at end.
@suryakiran29702 жыл бұрын
insert at beginning i.e. at head -> o(1)
@AYUSHISHARMABIT4 жыл бұрын
One of your best videos. Thank you.
@techdose4u4 жыл бұрын
Welcome :)
@vinayak186f33 жыл бұрын
Yt username me roll no. Likhne par exam me zyada aate hai kya ? Har koi likh rha hai 🌚
@sanjeevnirmal16173 жыл бұрын
Tum bahut mast kaam karta h bhai
@satish61553 жыл бұрын
I might be wrong but searching a key in a HashMap has worst complexity as O(n) because multiple elements(with same hashcode) can be present in same bucket.
@Rajesh-rg6fw2 жыл бұрын
The way u explained... It's brilliant. But i have 2 doubts 1. Hash table size is, random or equal to window size and how to handle collision? 2. What r it's real world implications ?
@abhishekpratapsingh92832 жыл бұрын
Its real world application is related to the memory management of different process that operate in machines.
@theprotagonist39063 жыл бұрын
Liked, subscribed, shared ❤
@techdose4u3 жыл бұрын
:)
@RimjhimSaha3699 ай бұрын
Does the Python's in build lru_cache works in the same way as you have written in your code?
@md_aaqil80274 жыл бұрын
Excellent Explanation sir and keep growing your channel
@techdose4u4 жыл бұрын
Thanks :)
@meghendrasharma7874 жыл бұрын
Sir can we use circular queue to reduce shifting since the insertion is always done at rear and deletion will be always done from front. also the time taken for both the operation will be 1
@rahulchaubey89884 жыл бұрын
Super explaination.👌👌
@techdose4u4 жыл бұрын
Thanks :)
@high-oncode75764 жыл бұрын
How its order of 1 time at 8:06 suppose the question given is 1 2 3 "2" 1=2=3 are in cache then if you found 2 then we need to make linked list 1=3=2 is it O(1) now? we need to find where is 2 in the list and put it to the back at front here ("=" means doubly linked list)
@ntesla54 жыл бұрын
refer his next video in which he explained the code of this
@manikantabandla39234 жыл бұрын
Your point seems acceptable.
@sainathreddy26324 жыл бұрын
i had implemented the code using singly linked list. the code is given below if there is any mistake please correct it #include using namespace std; struct node { int data; struct node *next; }; int main() { int arr[] = {1, 2, 3, 4, 1, 3}; int n = sizeof(arr) / sizeof(int); node *front; node *rear; node *temp; node *temp1; front = (struct node *)malloc(sizeof(struct node)); rear = (struct node *)malloc(sizeof(struct node)); temp = (struct node *)malloc(sizeof(struct node)); temp1 = (struct node *)malloc(sizeof(struct node)); front->data = -1; rear->data = -1; int k = 3; for (int i = 0; i < k; i++) { cout data == -1) { cout data = arr[i]; front->data = arr[i]; rear = front; } else { cout next = (struct node *)malloc(sizeof(struct node)); front->next->data = arr[i]; front = front->next; front->next = NULL; } } cout 0) { cout data) { cout next; front->data = op; } else { int data = temp->data; temp->next = temp->next->next; front->next = (struct node *)malloc(sizeof(struct node)); front = front->next; front->data = data; } } else { cout data; rear = rear->next; front->next = (struct node *)malloc(sizeof(struct node)); cout
@pradiplamsal14034 жыл бұрын
You explain topics pretty well. Thanks for this one
@techdose4u4 жыл бұрын
Welcome :)
@subhamswain25664 жыл бұрын
♥️❤️❤️❤️❤️this is awsome sir
@techdose4u4 жыл бұрын
Thanks :)
@shahedanam27344 жыл бұрын
Thanks,it's a very good explanation.
@techdose4u4 жыл бұрын
Welcome :)
@pranushaaa4 жыл бұрын
Thanks sir. Could understand easily
@techdose4u4 жыл бұрын
Nice :)
@anishsrivastava28852 жыл бұрын
In searching suppose an element is present in cache in the middle then we have to move it to front ....it will take O(n) time...how to optimise I it? I am getting TLE for it.
@maherukhzafar30934 жыл бұрын
Wonderful explanation!!
@techdose4u4 жыл бұрын
Thanks
@shreyasingh5423 жыл бұрын
You must be working really hard
@techdose4u3 жыл бұрын
:)
@the_sweet_heaven4 жыл бұрын
Very good content.
@techdose4u4 жыл бұрын
:)
@DurgaShiva75743 жыл бұрын
very very nice video...but what was the point to store the address of the nodes into the map as a key?... we never made any use of them..is there any use of value (i.e the address of the keys) in the most optimised algorithm ?... please let me know... thanks in advance
@LinnaDu3 жыл бұрын
very good insights
@SatyaPrakash-gj5vp4 жыл бұрын
Really Neat Explanation! There was an interview question asked what data structure do you use for caching? As per my knowledge i know LinkedHashMap or LinkedHashSet but interviewer asked why not ConcurrentHashMap? Please explain.
@ap3314 жыл бұрын
Then your answer would be...that i am not proficient in java...its a java concept
@thatindianboy28172 жыл бұрын
Something related to thread safety?
@thatindianboy28172 жыл бұрын
Btw why can't we use Singly Linked List?
@souravroychowdhury65255 ай бұрын
amazing explanation !!
@techdose4u5 ай бұрын
Thanks
@shresthmishra93294 жыл бұрын
Thank you so much TECH DOSE. :3
@techdose4u4 жыл бұрын
Welcome :3
@babujatoth9703 жыл бұрын
When we request 4 at 10:26 what if 4 is presented at 2 position?? Pls reply
@IT__KumariTejaswini-xv9ii4 жыл бұрын
Instead of using doubly linked list, can we use queue? because it will also give the time complexity O(1) .. Removing from front nd adding on rear...
@sarthakbhatia78884 жыл бұрын
Thanks a lot man !This was an excellent explaination.Just one doubt when we remove an element from an unorderedmap will it be a O(n) operation or O(1) operation??
@techdose4u4 жыл бұрын
O(n) worst case. Please read docs.
@parekshamanchanda80834 жыл бұрын
This is how you do it in an interview ❤️❤️
@techdose4u4 жыл бұрын
:) Yep
@LalitSharma16074 жыл бұрын
Brilliant explanation, Thanks
@techdose4u4 жыл бұрын
Welcome :)
@bhawanasahu300010 ай бұрын
Can anyone help me to understand how search operation in Deque takes O(1)? Searching any random index doesn't take O(n) complexity?
@dheerajpoonia21754 жыл бұрын
Sir please make video on FARTHEST SEARCH FIRST cache algorithm, it's is difficult to under please
@techdose4u4 жыл бұрын
Problem added in todo list. Will make it once I process the earlier requested problems.
@adarshsharmanit3564 жыл бұрын
@@techdose4u Queue will be better in LRU cache
@mujahidpasha44404 жыл бұрын
Can you explain which is the best algorithm to find the shortest path in a graph... I know there are a bunch of algorithms for that among that which is the optimal and why... Thanks again
@techdose4u4 жыл бұрын
Just stick with Dijkstra or else bellman ford for negative edges. It will work.
@dhanashreegodase44452 жыл бұрын
thank you for making this
@itvaya7 ай бұрын
can anyone tell me which tool is he using for writing the explanations
@adityapandey75164 жыл бұрын
Sir can't we use Deque here??
@NikhilSharma-xv6gx4 жыл бұрын
Great explanation as always. A minor doubt, why are we using Doubly Linked list? If its to link yhe previous node, can't we just algorithm for removing node in O(1)?
@vaibhavchawla24394 жыл бұрын
Yes you can but then you won't be able to get the new rear page. The page that will be least recent after removing the current least recent page. Hence you will need to update to rear to the page 1 before the least recent page that's why doubly linked list.
@jagadeeshr913 жыл бұрын
best one
@techdose4u3 жыл бұрын
👍🏼
@vaibhavchawla24394 жыл бұрын
Space complexity is O(size of cache) ? Asking because it is not mentioned in the video.
@techdose4u4 жыл бұрын
If you are just using cache then you are correct :)
@vaibhavchawla24394 жыл бұрын
@@techdose4u What are the other things am i missing something?
@HimanshuSharma-sd5gk3 жыл бұрын
Can we use a circular queue in place of linked list
@binod32043 жыл бұрын
Hi Sir, why we didn`t use single LL like this... 1-> 2->3 if 4 comes then pointing the head to the 2 and at the tail 4 is added. In this way we don`t need to traverse back to update the variable name. So was there need of doubly. Please help !!
@theuniquebrokengamer2 жыл бұрын
If the user wants access the 4th which is at end of the LL we have to move that to the top In doubly and queue we can do that easily
@mujahidpasha44404 жыл бұрын
You are awesome....
@techdose4u4 жыл бұрын
Thanks :)
@radhu83 жыл бұрын
Beautiful!
@techdose4u3 жыл бұрын
Thanks :)
@yitingg79423 жыл бұрын
The deque.remove(element), is this O(1) time ?
@techdose4u3 жыл бұрын
Gm 🌄 Don't think so.
@yitingg79423 жыл бұрын
@@techdose4u So we can't use deque then ?
@techdose4u3 жыл бұрын
@@yitingg7942 I think in LRU implementation, it could have been done using map if I remeber correctly, along with deque. Then it will be O(1) for remove. I will have to check it.
@yitingg79423 жыл бұрын
@@techdose4u Thanks Surya, I am a little confused that yes by using hashMap we can search for O(1) to see if it's there, to remove in DLL it's O(1) as well. Yes I admit that. However doesn't it take Linear time to search the whole DLL to see position this element is in and then remove it ? I don't use anybody use deque in the discussion, only DLL. So I am very confused.
@techdose4u3 жыл бұрын
@@yitingg7942 The time complexity is linear in the number of elements removed. It's implemented like a linked List in C++. It should be similar in Java as well. So yea, O(1) it is.
@venkatasriharsha42273 жыл бұрын
What if element is already present at the middle of linked list then removing it will take O(N) again right? Or can we go directly in O(1) since we have address of that element in hashmap?
@RAHULTHAKUR-ij5xu3 жыл бұрын
Yup ture hashmap stores address of linked lost nide, being doubly linked link it's easy to associate previous node to next node
@haitu88962 жыл бұрын
You need to update hashmap, it takes O(n) not O(1)
@awesomeps104 жыл бұрын
Can't weuse deque instead of a doubly linked list for O(1) deletion and insertion?
@aayush54744 жыл бұрын
yeah i also thought the same
@avinash-xh6qw3 жыл бұрын
You can use Either Deque or List or DLL.
@080somyasrivastava64 жыл бұрын
How to think which data structure is to be applied ?
@techdose4u4 жыл бұрын
Actually you need to figure out the goal of question and the operations you want to perform. Now from your knowledge, you will think what DS to apply to get the job done efficiently. The more you practice, the better you get at deciding good DS & Algo :)
@SubhamKumar-90093 жыл бұрын
nice
@ElifArslan-l9g Жыл бұрын
thank you
@techdose4u Жыл бұрын
Welcome :)
@xlr8tanmay3 жыл бұрын
Why are we using a Doubly Linked List here?
@b3arwithm38 ай бұрын
Easy to remove an element
@bestmovies362 жыл бұрын
Thank for you
@divyankgupta4178 Жыл бұрын
Please explain in simple terms..the main purpose of us students is to solve problem.. not to figure out complex terminologies
@gargsaumya204 жыл бұрын
I have a silly doubt. If we use hash function instead of shifting elements in array, then also we have a O(N) space complexity, then how can we say that it can be optimized..?Please bhaiya solve my doubt..
@bhavya2992 жыл бұрын
array is fixed size ... won't grow dynamically so linked list is useful
@thatindianboy28172 жыл бұрын
Why not single linked list????
@somaanilsreeram95554 жыл бұрын
Can you do a video on LFU cache as well?
@techdose4u4 жыл бұрын
I will try that as well.
@rahulchaubey89884 жыл бұрын
👌👌👌👌
@aabhassaxena24904 жыл бұрын
1 2 3 4 5 6 3 5 6 You did not covered handling of such cases!
@techdose4u4 жыл бұрын
I already covered. When 2nd time 5 comes then you need to reorder the DLL. I already told DLL reordering is required and done in O(1).
@aabhassaxena24904 жыл бұрын
But the deletion of node and changing of pointers u didn't showed,although u explained that
@techdose4u4 жыл бұрын
For that we are already using DS and it is too trivial to explain.
@profesorgaussexpress49592 жыл бұрын
you are switching rear with the front!
@lovelysen41712 жыл бұрын
Where is the code man
@shaswatdas65534 жыл бұрын
#Python code with OrderedDict only from collections import OrderedDict class LRU: def __init__(self, capacity: int): self.cache = OrderedDict() self.capacity = capacity def refer(self, k): print('-----------------Each Iter--------------------') print('k =', k) print(self.cache.keys()) if k in self.cache: self.cache.move_to_end(k, last=False) return True else: self.cache[k] = True self.cache.move_to_end(k, last=False) if len(self.cache) > self.capacity: self.cache.popitem() return False # RUNNER # initializing our cache with the capacity of 2 lru = LRU(4) print(lru.refer(1)) print(lru.refer(2)) print(lru.refer(3)) print(lru.refer(1)) print(lru.refer(4)) print(lru.refer(5)) print('------------------------Final------------------------') print(lru.cache.keys())
@ArpitDhamija4 жыл бұрын
IB me submit krte hue, 1000 points ke 200 ho gye 😂😂😢😢
@techdose4u4 жыл бұрын
🤣 koi baat nhi....sikhne se mtlb hai :)
@ArpitDhamija4 жыл бұрын
@@techdose4u testcases of IB are horrible
@ArpitDhamija4 жыл бұрын
@@techdose4u sir I have few doubts in IB questions, can you make explanation video of those questions....
@KarenLee-s6xАй бұрын
Martin George White Ruth Perez Robert
@abhishekshrivastava98953 жыл бұрын
Your implementation will fail for Test Case : 1 2 3 1 4
@shaswatdas65534 жыл бұрын
#Python code with self implemented doubly linked list import gc class Node: def __init__(self, key): self.key = key self.next = self.prev = None def __str__(self): return f'{self.key}' class DoublyLL: def __init__(self): self.head = self.last = None self.size = 0 def insertfirst(self, node): if self.head is None: self.head = self.last = node else: self.head.prev = node node.next = self.head self.head = node self.size += 1 def deletenode(self, node=None): if node == None: node = self.last self.last = self.last.prev elif node.next == None: self.last = self.last.prev k = node.key if node.prev is not None: node.prev.next = node.next if node.next is not None: node.next.prev = node.prev node.next = node.prev = None gc.collect() self.size -= 1 # print('deleted', k) return k class LRU: def __init__(self, n): self.dll = DoublyLL() self.dict = {} self.csize = n def refer(self, k): print('-----------------Each Iter--------------------') print('k =', k) print('Cache:\t', end='') self.print_cache() addr = self.dict.get(k) if addr != None and addr == self.dll.head: return True if self.dll.size == self.csize or addr != None: del_k = self.dll.deletenode(addr) del self.dict[del_k] node = Node(k) self.dll.insertfirst(node) self.dict[k] = node return True if addr is not None else False def print_cache(self): temp = self.dll.head while temp is not None: print(temp, end=' ') temp = temp.next print() lru = LRU(4) print(lru.refer(1)) print(lru.refer(2)) print(lru.refer(3)) print(lru.refer(1)) print(lru.refer(4)) print(lru.refer(5)) print('------------------------Final------------------------') lru.print_cache() print(lru.dll.head)