మీ data పరిమాణం ముందుగా తెలిసినప్పుడు arrays అద్భుతంగా పనిచేస్తాయి. కానీ data అనూహ్యంగా వస్తే - sensor readings స్ట్రీమ్, AI ప్రాసెస్ చేయాల్సిన tasks queue, లేదా ప్రతి సందేశంతో పెరిగే సంభాషణ చరిత్ర? అప్పుడు సులభంగా పెరిగి తగ్గే నిర్మాణాలు కావాలి.
Linked lists, stacks మరియు queues - dynamic త్రయాన్ని పరిచయం చేసుకోండి.
Linked list అంశాలను nodes గొలుసుగా నిల్వ చేస్తుంది. ప్రతి node రెండు విషయాలు కలిగి ఉంటుంది: data మరియు గొలుసులో తదుపరి node కి pointer (సూచన).
[data: "A" | next: →] → [data: "B" | next: →] → [data: "C" | next: null]
Arrays లా కాకుండా, linked list nodes మెమరీలో పక్కపక్కనే ఉండవు. అవి ఎక్కడైనా ఉండవచ్చు - pointer తదుపరిది ఎక్కడ ఉందో చెబుతుంది.
| కార్యకలాపం | Array | Linked List | |-----------|-------|-------------| | Index ద్వారా ప్రాప్యత | O(1) ⚡ | O(n) 🐢 | | మొదట చేర్చడం | O(n) 🐢 | O(1) ⚡ | | మధ్యలో చేర్చడం | O(n) 🐢 | O(1)* ⚡ | | మధ్య నుండి తొలగించడం | O(n) 🐢 | O(1)* ⚡ | | మెమరీ వాడకం | సంక్షిప్తం | అదనపు (pointers) |
*స్థానం కనుగొన్న తర్వాత - కనుగొనడం ఇంకా O(n).
మీ browser tab bar tabs ను స్వేచ్ఛగా తెరవడం, మూసివేయడం మరియు పునర్వ్యవస్థీకరించడం అనుమతిస్తుంది. Open tabs జాబితా నిర్వహించడానికి array లేదా linked list ఏది మెరుగు? మధ్యలో tab మూసివేసినప్పుడు ఏమి జరుగుతుందో ఆలోచించండి.
Stack సరిగ్గా plates stack లాగే పనిచేస్తుంది: పైన పెడతారు మరియు పై నుండి తీస్తారు. చివరిగా పెట్టిన item మొదట తీయబడుతుంది.
Push "A" → [A]
Push "B" → [A, B]
Push "C" → [A, B, C]
Pop → [A, B] (తొలగించబడింది: "C")
Pop → [A] (తొలగించబడింది: "B")
Sign in to join the discussion
రెండు operations stack ను నిర్వచిస్తాయి:
రెండూ O(1) - stack పరిమాణంతో సంబంధం లేకుండా తక్షణం.
"Stack overflow" error కనిపించినప్పుడు, అది అక్షరాలా call stack కు స్థలం అయిపోయిందని అర్థం - సాధారణంగా function ఆగకుండా తనను తాను call చేసుకోవడం వల్ల (infinite recursion). ప్రసిద్ధ Q&A సైట్ Stack Overflow ఈ error పేరు మీదే పెట్టబడింది.
Drawing application కోసం 'undo' feature implement చేస్తున్నారు. Actions చరిత్రకు ఏ data structure ఉత్తమం?
Queue దుకాణంలో వరుసలా పనిచేస్తుంది: మొదట చేరిన వ్యక్తి మొదట సేవ అందుకుంటాడు. అంశాలు వెనుక చేర్చబడతాయి మరియు ముందు నుండి తొలగించబడతాయి.
Enqueue "A" → [A]
Enqueue "B" → [A, B]
Enqueue "C" → [A, B, C]
Dequeue → [B, C] (తొలగించబడింది: "A")
Dequeue → [C] (తొలగించబడింది: "B")
AI API సెకనుకు 10,000 requests అందుకుంటుంది. Requests వచ్చిన క్రమంలో process అవ్వడానికి ఏ structure?
Priority queue కూడా ఉంది, ఇందులో items రాక క్రమం కాకుండా priority ఆధారంగా dequeue అవుతాయి. AI systems అత్యవసర tasks ను ముందు process చేయడానికి priority queues ఉపయోగిస్తాయి - self-driving car route planning కంటే obstacle detection కు priority ఇవ్వవచ్చు.
భాషా నమూనాలు text ను sequences గా process చేస్తాయి. PyTorch మరియు TensorFlow వంటి frameworks computation graphs నిర్మించడానికి linked-list వంటి నిర్మాణాలను ఉపయోగిస్తాయి - ప్రతి step తదుపరి దానిని సూచించే operations గొలుసులు.
Neural network train చేసేటప్పుడు, tensors సృష్టించబడుతూ నాశనమవుతూ ఉన్నప్పుడు memory నిరంతరం allocate మరియు free అవుతుంది. Memory allocators కొత్త tensors కోసం తగిన స్థలం కనుగొనడానికి free memory blocks యొక్క linked lists ఉపయోగిస్తాయి.
Chatbot సంభాషణలో చివరి 10 సందేశాలను గుర్తుంచుకోవాలి కానీ పాతవి తొలగించాలి. Stack, queue లేదా మరేదైనా ఉపయోగిస్తారా? 11వ సందేశం వచ్చినప్పుడు ఏమి జరుగుతుంది?
Linked lists గురించి ఏ statement తప్పు?
చాలా applications లో undo history కి పరిమితి ఉంటుంది - సాధారణంగా 100 నుండి 1,000 actions. ఈ పరిమితి లేకుండా stack ఎల్లప్పుడూ పెరిగే memory వినియోగిస్తుంది. కొన్ని advanced systems ఇటీవలి actions ఉంచడానికి మరియు పాతవి తొలగించడానికి stack మరియు queue కలయిక ("deque") ఉపయోగిస్తాయి.