<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>@elyor_dev</title><author><name>@elyor_dev</name></author><id>https://teletype.in/atom/elyor_dev</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/elyor_dev?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@elyor_dev?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=elyor_dev"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/elyor_dev?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-06-09T22:28:02.417Z</updated><entry><id>elyor_dev:dijkstra_algorithms</id><link rel="alternate" type="text/html" href="https://teletype.in/@elyor_dev/dijkstra_algorithms?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=elyor_dev"></link><title>Dijkstra's Algorithm</title><published>2024-01-06T12:48:42.886Z</published><updated>2024-01-06T12:48:42.886Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/7d/78/7d78ed93-ca26-4f7e-8623-cd63889ef7ce.png"></media:thumbnail><tt:hashtag>dijkstras_algorithm</tt:hashtag><tt:hashtag>algorithm</tt:hashtag><tt:hashtag>elyor_dev</tt:hashtag><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/9a/2f/9a2f9884-42ba-42d3-9733-4b2218dd9857.png&quot;&gt;Rasmda berilgan graph Vaznli graph (weighted graph) deyiladi. Bunday graphlarning bir nuqtasidan boshqa nustasigacha bo'lgan vazni bo'ladi (rasmda bir nuqtalar orasidagi masofa keltirilgan). Bunday graphlarda ikki nuqta orasidagi eng kichik masofani topishlik uchun &quot;Dijkstra algoritmi&quot; ishlatiladi. BFS (breadth first search) algoritmi bilan bir nuqtadan ikkinchi nuqtaga olib boruvchi eng kichik yo'lni topgan bo'lsak (unda masofalar yo'q edi, segmentlar bor edi), Dijkstra algoritmi bilan eng kichik masofani topib olamiz. 

Quyida weigthed graph va Dijkstra algoritmining codedagi implementatsiyasini ko'rob chiqamiz:</summary><content type="html">
  &lt;figure id=&quot;aptU&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9a/2f/9a2f9884-42ba-42d3-9733-4b2218dd9857.png&quot; width=&quot;928&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;qlsA&quot;&gt;Rasmda berilgan graph &lt;strong&gt;Vaznli graph (weighted graph) &lt;/strong&gt;deyiladi. Bunday graphlarning bir nuqtasidan boshqa nustasigacha bo&amp;#x27;lgan vazni bo&amp;#x27;ladi (rasmda bir nuqtalar orasidagi masofa keltirilgan). Bunday graphlarda ikki nuqta orasidagi eng kichik masofani topishlik uchun &lt;strong&gt;&amp;quot;Dijkstra algoritmi&amp;quot; &lt;/strong&gt;ishlatiladi. BFS (breadth first search) algoritmi bilan bir nuqtadan ikkinchi nuqtaga olib boruvchi eng kichik yo&amp;#x27;lni topgan bo&amp;#x27;lsak (unda masofalar yo&amp;#x27;q edi, segmentlar bor edi), Dijkstra algoritmi bilan eng kichik masofani topib olamiz. &lt;br /&gt;&lt;br /&gt;Quyida weigthed graph va Dijkstra algoritmining codedagi implementatsiyasini ko&amp;#x27;rob chiqamiz:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
  &lt;p id=&quot;atWM&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;EZAb&quot; data-lang=&quot;typescript&quot;&gt;type WeightedGraphType = Record&amp;lt;string, Record&amp;lt;string, number&amp;gt;&amp;gt;

class WeightedGraph {

  private graph: WeightedGraphType
  constructor () {    
    this.graph = {}  
  }

  print () {    
    return this.graph  
  }
  // graphga uzel (edge) lar qo&amp;#x27;shish uchun
  addEdge (key: string, value: Record&amp;lt;string, number&amp;gt;) {    
     this.graph[key] = value  
  }
  // start nuqtadan qolgan barcha nuqtalargacha bo&amp;#x27;lgan
  // masofani qaytaradi
  dijkstra(start: string): Record&amp;lt;string, number&amp;gt; {
     // start nuqtadan qolgan barcha nuqtalargacha bo&amp;#x27;lgan eng    
     // kichik masofani saqlash uchun     
     const distances: Record&amp;lt;string, number&amp;gt; = {};
     
     // tashrif buyurilgan nuqtalarni saqlash uchun    
     const visited = new Set&amp;lt;string&amp;gt;();

     // graph keylarini massivga olamiz // [&amp;#x27;a&amp;#x27;, &amp;#x27;b&amp;#x27; ..., &amp;#x27;g&amp;#x27;]    
     let nodes = Object.keys(this.graph);

     // har bir nuqta uchun boshlang&amp;#x27;ich masofani Inifinity     
     // qilib belgilab olamiz
     for (let node of nodes) {        
         distances[node] = Infinity;    
     }

     // boshlang&amp;#x27;ich nuqtadan o&amp;#x27;zigacha bo&amp;#x27;lgan masofa    
     // 0 bo&amp;#x27;lgani uchun uni 0 ga tenglaymiz
     distances[start] = 0;

     // barcha nodelar bo&amp;#x27;ylab siklda aylanib chiqamiz    
     while (nodes.length) {
       // nodelarni kamayish tartibida tartiblab olamiz va        
       // undan eng yaqin bo&amp;#x27;lgan nodeni olamiz
       nodes.sort((a, b) =&amp;gt; distances[b] - distances[a]);        
       let closestNode = nodes.pop()!;
       
       // agar eng yaqin nodegacha bo&amp;#x27;lgan masoda hali ham Infinity bo&amp;#x27;lsa,        
       // u holda u siklni to&amp;#x27;xtatamiz
       if (distances[closestNode] === Infinity) {          
           break        
       }
       
       // eng yaqin node&amp;#x27;ni tashrif buyurilganlarga qo&amp;#x27;shamiz        
       visited.add(closestNode);
       
       // node&amp;#x27;ning har bir qo&amp;#x27;shnilari bo&amp;#x27;ylab yurib chiqamiz        
       for (let neighbor in this.graph[closestNode]) {
          // agar qo&amp;#x27;shni node&amp;#x27;ga hali tashrif buyurilmagan bo&amp;#x27;lsa            
          if (!visited.has(neighbor)) {                
            // node&amp;#x27;dan uning qo&amp;#x27;shinisigacha bo&amp;#x27;lgan masofani hisoblaymiz                
            let newDistance = distances[closestNode] + this.graph[closestNode][neighbor];                                
            // agar hisoblangan masofa ayni paytdagi masofadan kichik bo&amp;#x27;lsa                
            // u holda ayni masofani o&amp;#x27;zgartiramiz (eng kichik masofa)                
            if (newDistance &amp;lt; distances[neighbor]) {                    
               // eng kichik masofani update qilamiz                    
               distances[neighbor] = newDistance;                
            }            
          }        
       }
     }
    // start nuqtadan qolgan nuqtalargacha (nodelar) bo&amp;#x27;lgan eng     
    // kichik masofalarni qaytaramiz    
    return distances;
  } 

  // bir nuqtadan ikkinchi nuqtagacha bo&amp;#x27;lgan eng kichik masofa
  shortDistance (start: string, end: string): number | undefined {
     return this.dijkstra(start)[end]
  }   
}

// Weighted graph instance
const weightedGraph = new WeightedGraph()

// uzel (edge) larni qo&amp;#x27;shib chiqamiz
weightedGraph.addEdge(&amp;#x27;a&amp;#x27;, {b: 2, c: 1})
weightedGraph.addEdge(&amp;#x27;b&amp;#x27;, {f: 7})
weightedGraph.addEdge(&amp;#x27;c&amp;#x27;, {d: 5, e: 2})
weightedGraph.addEdge(&amp;#x27;d&amp;#x27;, {f: 2})
weightedGraph.addEdge(&amp;#x27;e&amp;#x27;, {f: 1})
weightedGraph.addEdge(&amp;#x27;f&amp;#x27;, {g: 1})
weightedGraph.addEdge(&amp;#x27;g&amp;#x27;, {})

console.log(weightedGraph.print())
// {
//   a: { b: 2, c: 1 },
//   b: { f: 7 },
//   c: { d: 5, e: 2 },
//   d: { f: 2 },
//   e: { f: 1 },
//   f: { g: 1 },
//   g: {}
// }

console.log(weightedGraph.dijkstra(&amp;#x27;a&amp;#x27;)) // { a: 0, b: 2, c: 1, d: 6, e: 3, f: 4, g: 5 }
// a nuqtadan g nuqtagacha bo&amp;#x27;lgan masofani topish
console.log(weightedGraph.shortDistance(&amp;#x27;a&amp;#x27;, &amp;#x27;g&amp;#x27;)) // 5&lt;/pre&gt;
  &lt;p id=&quot;u5td&quot;&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;48Bq&quot;&gt;
    &lt;tt-tag name=&quot;dijkstras_algorithm&quot;&gt;#dijkstras_algorithm&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;algorithm&quot;&gt;#algorithm&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;elyor_dev&quot;&gt;#elyor_dev&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;
  &lt;p id=&quot;WOQc&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;QwKc&quot;&gt;Telegram kanalim: &lt;a href=&quot;https://t.me/elyor_dev&quot; target=&quot;_blank&quot;&gt;https://t.me/elyor_dev&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>elyor_dev:linked_list</id><link rel="alternate" type="text/html" href="https://teletype.in/@elyor_dev/linked_list?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=elyor_dev"></link><title>Linked List (bog'langan ro'yxat)</title><published>2023-12-25T16:51:20.428Z</published><updated>2023-12-25T16:57:26.635Z</updated><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/4d/c9/4dc998f5-008f-4c53-b609-81bc735b923a.png&quot;&gt;Linked List - bu data strukturalardan biri bo'lib undagi bir element o'zidan keyingi elementga linkni saqlaydi. Misol uchun:</summary><content type="html">
  &lt;p id=&quot;BUqG&quot;&gt;Linked List - bu data strukturalardan biri bo&amp;#x27;lib undagi bir element o&amp;#x27;zidan keyingi elementga linkni saqlaydi. Misol uchun: &lt;br /&gt;&lt;/p&gt;
  &lt;pre id=&quot;jq80&quot; data-lang=&quot;typescript&quot;&gt;const list = {
   value: 1,
   next: {
     value: 0,
     next: {
       value: 3,
       next: {
          .......
       }
     }
   }
}&lt;/pre&gt;
  &lt;p id=&quot;BrX3&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;SK59&quot;&gt;&lt;br /&gt;&lt;/p&gt;
  &lt;figure id=&quot;ZE5w&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4d/c9/4dc998f5-008f-4c53-b609-81bc735b923a.png&quot; width=&quot;255&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;5M0O&quot;&gt;Yuqoridagi rasmda massiv va linked list ustida amallarning (o&amp;#x27;qish, element qo&amp;#x27;shish, o&amp;#x27;chirish) bo&amp;#x27;yicha tezligi keltirilgan. &lt;br /&gt;&lt;br /&gt;Quyida linked listning bir elementini generatsiya qilib beradigan class keltirilgan:&lt;/p&gt;
  &lt;pre id=&quot;BSKM&quot; data-lang=&quot;typescript&quot;&gt; class ListNode {    
    val: number    
    next: ListNode | null // keyingi element   
     
    constructor(val?: number, next?: ListNode | null) {        
        this.val = (val === undefined ? 0 : val)        
        this.next = (next === undefined ? null : next)    
    }
 }&lt;/pre&gt;
  &lt;p id=&quot;9CfC&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;NhuB&quot;&gt;Massivdagi sonlardan Linked List yasab chiqamiz:&lt;br /&gt;&lt;/p&gt;
  &lt;pre id=&quot;prpc&quot; data-lang=&quot;typescript&quot;&gt;const temp = [0, 1, 2, 3, 4, 5]

function generateLinkedList(arr: number[]): ListNode | null {
  if (arr.length === 0) {    
    return null  
  }

  const head = new ListNode(arr[0])  
  let current = head

  for (let i = 1; i &amp;lt; arr.length; i++) {    
    const newNode = new ListNode(arr[i])    
    current.next = newNode    
    current = newNode  
  }

  return head
  
}

const list = generateLinkedList(temp) //{val: 0, next: {val: 1, next: ...}}
&lt;/pre&gt;
  &lt;p id=&quot;EiSh&quot;&gt;&lt;br /&gt;&lt;/p&gt;
  &lt;p id=&quot;fLYq&quot;&gt;LinkedList classini yozamiz:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
  &lt;pre id=&quot;ezK5&quot; data-lang=&quot;typescript&quot;&gt;
class LinkedList {    
  head: ListNode | null    
  private _size: number // Linked Listning o&amp;#x27;lchamini saqlaymiz.

    constructor() {        
      this.head = new ListNode()        
      this._size = 0    
    }

    // listni uzunligini qaytaradi    
    get size () {        
      return this._size    
    }

    // kerakli indexga element qo&amp;#x27;shish
    insertAt(element: number, index: number) {
      if (index &amp;lt; 0 || index &amp;gt; this.size) {
        return console.log(&amp;quot;Mavjud bo&amp;#x27;lmagan index&amp;quot;);
      }

      // Yangi node yaratib olamiz
      let node = new ListNode(element)            
      let curr = this.head          
      let prev: ListNode | null = null

      // Agar birinchi element bo&amp;#x27;lsa            
      // ortiqcha sikl kerak emas
      if (index == 0) {                
          node.next = this.head;                
          this.head = node;            
      } else {                
         curr = this.head;                
         let it = 0;

         while (it &amp;lt; index) {
           it++;                    
           prev = curr;                    
           curr = curr?.next || null;
         }

         // element qo&amp;#x27;shish                
         node.next = curr;                
         prev!.next = node;
       }

       this._size++
    }
}
   &lt;/pre&gt;
  &lt;p id=&quot;rlm8&quot;&gt;&lt;br /&gt;&lt;br /&gt;To&amp;#x27;liqroq ma&amp;#x27;lumot olish uchun: &lt;a href=&quot;https://www.freecodecamp.org/news/implementing-a-linked-list-in-javascript/&quot; target=&quot;_blank&quot;&gt;https://www.freecodecamp.org/news/implementing-a-linked-list-in-javascript/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;#linked_list #data_structure #algorithms&lt;br /&gt;&lt;br /&gt;@elyor_dev&lt;/p&gt;

</content></entry></feed>