Dijkstra Algoritması: En Kısa Yolun Sırrı

Поділитися
Вставка
  • Опубліковано 15 гру 2024

КОМЕНТАРІ • 123

  • @bozkirayazi
    @bozkirayazi Рік тому +4

    tam da kodlama mantığıyla anlatmışsınız. kendini denemek isteyenler için bu çok güzel olmuş. başka hiç bir kaynağa bakmadan anlatımınızdaki püf noktaları kullanarak kodlanabiliyor.

    • @TechBuddyTR
      @TechBuddyTR  Рік тому +2

      Teşekkür ederim. Böyle düşünmeniz sevindirici çünkü amacıma ulaştığımı gösteriyor :)

  • @bugrabozkurt
    @bugrabozkurt Рік тому +3

    Anlatımınız için teşekkür ederim, gayet açıklayıcı olmuş. Sadece kodlama veya sadece beyaz tahta yerine, önce beyaz tahta ardından kodlama kısmına geçmeniz, hatta karışık olduğunu düşündüğünüz yerlerde beyaz tahtadaki anlatımınızdan alıntılarla zenginleştirmeniz A'dan Z'ye ulaşmanın maliyetli fakat en verimli yolu olacağını düşünüyorum. Emeğiniz için tekrar teşekkür ederim.

    • @TechBuddyTR
      @TechBuddyTR  Рік тому

      İkisinin aynı videoda olması sebebiyle video boyutu çok uzayacaktı maalesef. O yüzden sadece tahta gayet yeterli gibi. Kodunu da gerekirse bi ara yazabiliriz birlikte :)

  • @emircankoc6630
    @emircankoc6630 Рік тому +8

    Harika bir konsept , harika bir içerik , devamını bekliyoruz.

  • @enesburakdikici4139
    @enesburakdikici4139 Рік тому +3

    eğer bir gün kanalı kapatmayı düşünsen bile videoları silme hepsi birbirinden kıymetli

    • @TechBuddyTR
      @TechBuddyTR  Рік тому +1

      :) İnşallah o günleri görmeyiz

  • @Eren_Ozdemir
    @Eren_Ozdemir Рік тому +5

    Hocam favori kanallarımdansınız.Bizlere öğrettiğiniz ve öğreteceğiniz her şey için çok teşekkür ederim😊😊

  • @ibrohimumarrr
    @ibrohimumarrr Рік тому +1

    Cok anlaşılır olmus, ayrica beyaz tahtada soru cevap yapsakda cok iyi olurdu

  • @hkbircan
    @hkbircan Рік тому +2

    Hocam çok teşekkürler. Küçük bi ayrıntı dikkatimi çekti, a>b>d>f>c yolu ile a>b>e>f>c maliyeti aynı oluyor. Burada B den F ye gitmenin maliyeti E üzerinden 7 birim, D üzerinden de 7 birim sanırım tablodan çıkan parentlerden çift B çıkmasının nedeni de B den F ye iki ayrı yol oluşuyor. Çok teşekkür ediyorum çok faydalı bilgilendirici bir video oldu 😊

  • @furkanylmaz2570
    @furkanylmaz2570 Рік тому +2

    Hocam üniversite anılarım canlandı, hem anlatımınız hem de bilgilendirmeniz için teşekkür ederim. :)

  • @zeze42212
    @zeze42212 8 місяців тому +1

    Çok teşekkürler hocam gayet anlaşılır ve mantığa yatan bir anlatım olmuş.

  • @alperen78901
    @alperen78901 Рік тому +2

    Efsane bir anlatım çok teşekkürler işin mantığını öğreten açıklayıcı bir video olmuş.

  • @Littlebitte
    @Littlebitte Рік тому +2

    Farklı bir tat katmış yeni konsept, beğendim.

  • @ozancank
    @ozancank Рік тому +2

    Önce teori sonra kodlama çok iyi olmuş hocam emeğinize sağlık

  • @omerselamiersoy
    @omerselamiersoy Рік тому +5

    Bu konsept bence gayet başarılı, arada bu tarz videolar gayet zenginleştirici olur. Emeğine sağlık.

    • @TechBuddyTR
      @TechBuddyTR  Рік тому

      Ben de aynı kanaatteyim. Teşekkürler :)

  • @yunusemreteke
    @yunusemreteke Рік тому +1

    LinkedList e benziyor gibi fark burada herkes kendinden önceki en yakını biliyor, güzel olmuş Salih abi eline sağlık.

  • @muhammedemin4239
    @muhammedemin4239 Рік тому +6

    Hocam çok açıklayıcı ve çok güzel bir videoydu.Şahsen bu tür videolardan sonra bilgisayar ortamında herhangi bir dille de bunun kodunu yazmanızı çok isterim

    • @TechBuddyTR
      @TechBuddyTR  Рік тому +1

      Teşekkürler :) Belki başka bir videoda yazarız onu da

  • @saidaydn5159
    @saidaydn5159 Рік тому +3

    çok teşekürler bu konseptin devamını bekliyoruz

    • @TechBuddyTR
      @TechBuddyTR  Рік тому +1

      :) Ben de devamını getirmek istiyorum. Bakalım neler çıkacak karşımıza.

  • @nereqla
    @nereqla Рік тому +3

    Konsept çok ilgi çekici olmuş bence. Ayrıca inanılmaz da açıklayıcı. Çok beğendim, emeğine sağlık hocam.

  • @berk4239
    @berk4239 Рік тому +2

    Teşekkürler hocam. Konsept ve anlatımınız gayet anlaşılır.

  • @a.t10
    @a.t10 Рік тому +3

    teşekkürler hocam gayet etkili oldu tahta üzerinde

  • @adilatman
    @adilatman Рік тому +1

    Beyaz tahta guzel fikir. Elinize saglik.

  • @muhammedmustafavanl9463
    @muhammedmustafavanl9463 Рік тому +1

    Hocam daha çok yüzünüzü görmek isteriz böyle videolar daha çok gelsin algoritmalara dayalı seriler daha çok ilgi çekici

    • @TechBuddyTR
      @TechBuddyTR  Рік тому

      Sayıları artırmaya çalışacağım ben de :)

  • @aydinbaskara3353
    @aydinbaskara3353 Рік тому +1

    Çok teşekkürler, çizerek anlatmamız daha guzel olmuş. Daha kolay anladim

  • @ManyakMimic
    @ManyakMimic Рік тому +1

    Hocam anlatım için teşekkürler, gayet açık ve net anlatmışsınız, bu tarz videoların gelmesi dileği ile. Anlatıma istinaden söyle bir kod yazdım,
    using System;
    using System.Collections.Generic;
    namespace Test
    {
    internal static class Program
    {
    static void Main()
    {
    var nodeA = new Node("A");
    var nodeB = new Node("B");
    var nodeC = new Node("C");
    var nodeD = new Node("D");
    var nodeE = new Node("E");
    var nodeF = new Node("F");
    var nodes = new List()
    {
    nodeA,
    nodeB,
    nodeC,
    nodeD,
    nodeE,
    nodeF,
    };
    var edges = new List
    {
    new Edge(nodeA, nodeB, 2),
    new Edge(nodeA, nodeD, 8),
    new Edge(nodeB, nodeD, 5),
    new Edge(nodeB, nodeE, 6),
    new Edge(nodeD, nodeE, 3),
    new Edge(nodeD, nodeF, 2),
    new Edge(nodeE, nodeC, 9),
    new Edge(nodeE, nodeF, 1),
    new Edge(nodeF, nodeC, 3)
    };
    var result = FindPath(nodes, edges, nodeA, nodeC);
    if (result != null)
    {
    var node = result;
    // yazdırma işlemi
    while (node != null)
    {
    if (node.Next != null)
    {
    Console.WriteLine($"{node.Name} -> {node.Next.Name}");
    }
    else
    {
    Console.WriteLine($"{node.Name} ({node.Value})");
    }
    node = node.Next;
    }
    }
    else
    {
    Console.WriteLine("Yol bulunamadı.");
    }
    }
    private static Node FindPath(List nodes, List edges, Node from, Node to)
    {
    // değelerin sıfırlanması
    foreach (var node in nodes)
    {
    node.Parent = null;
    node.Next = null;
    node.Value = int.MaxValue;
    node.Discovered = false;
    }
    // başlangıç değeri için ilk değer ataması
    from.Value = 0;
    // Discovered olmayan ve en küçük değere sahip nodun seçilmesi
    var current = GetMinNode(nodes);
    while (current != null)
    {
    foreach (var edge in edges)
    {
    // Discovered node içeren Edgenin geçilmesi
    if (edge.Left.Discovered || edge.Right.Discovered)
    {
    continue;
    }
    // Edge ilgili nodu içeriyorsa işlem yap
    if (edge.Left == current || edge.Right == current)
    {
    // ilgili node dışındaki nodun atanması (diğer uçtaki node)
    var node = edge.Left == current ? edge.Right : edge.Left;
    // ilgili node ile diğer uçtaki node değerinin hesaplanması
    var value = Math.Min(current.Value + edge.Length, node.Value);
    // hesaplanan değer uçtaki node değerinden küçükse Parent ve Value değerini ata
    if (value < node.Value)
    {
    node.Value = value;
    node.Parent = current;
    }
    }
    }
    // Discovered değerinin set edilmesi
    current.Discovered = true;
    // mevcut node hedef değere eşit ise çık
    if (current == to)
    {
    var parent = current.Parent;
    // baştan sona yazdırma işlemi için next propertylerinin atanması
    while (parent != null)
    {
    parent.Next = current;
    current = parent;
    parent = current.Parent;
    }
    return current;
    }
    else
    {
    // Discovered olmayan ve en küçük değere sahip nodun seçilmesi
    current = GetMinNode(nodes);
    }
    }
    return null;
    }
    private static Node GetMinNode(List nodes)
    {
    Node minNode = null;
    foreach (var node in nodes)
    {
    // Discovered olamyan ve Value değeri Max olmayan nodları kullan
    if (!node.Discovered && node.Value != int.MaxValue)
    {
    if (minNode == null || minNode.Value > node.Value)
    {
    minNode = node;
    }
    }
    }
    return minNode;
    }
    class Node
    {
    public Node Parent
    {
    get;
    set;
    }
    public Node Next
    {
    get;
    set;
    }
    public string Name
    {
    get;
    }
    public int Value
    {
    get;
    set;
    }
    public bool Discovered
    {
    get;
    set;
    }
    public Node(string name)
    {
    Name = name;
    }
    public override string ToString()
    {
    return Name;
    }
    }
    class Edge
    {
    public Node Left
    {
    get;
    }
    public Node Right
    {
    get;
    }
    public int Length
    {
    get;
    }
    public Edge(Node left, Node right, int length)
    {
    Left = left;
    Right = right;
    Length = length;
    }
    public override string ToString()
    {
    return $"{Left} {Right} ({Length})";
    }
    }
    }
    }

  • @casull6447
    @casull6447 Рік тому +1

    hocam uğraşlarınız için teşekkürler.

  • @ahmettanr5112
    @ahmettanr5112 Рік тому +1

    Çok güzell bir video olmuş. İlk videoda böyle anlatım yapıp bir diğer videoda da kodlamasının yapılması mantıklı olabilir.

    • @TechBuddyTR
      @TechBuddyTR  Рік тому +1

      C# kodlama videosu da geldi :)

    • @ahmettanr5112
      @ahmettanr5112 Рік тому

      Çoktan izledim hocam teşekkür ederim değerli bilgileriniz için :)@@TechBuddyTR

  • @Hasanozturkk19
    @Hasanozturkk19 11 місяців тому +1

    Ağzınıza sağlık hocam çok teşekkürler

  • @atakanarslan2772
    @atakanarslan2772 Рік тому +1

    Teşekkürler hocam. Daha 2 gün önce çalışmıştım bu konuya, üstüne güzel oldu.

    • @TechBuddyTR
      @TechBuddyTR  Рік тому +1

      Çok iyi denk gelmiş o zaman. Kolay gelsin

  • @occeymh
    @occeymh Рік тому +1

    Güzel bir konsept olmuş. Teşekkürler.

  • @elifsu7033
    @elifsu7033 Рік тому +1

    Sizi yeni keşfettim ve gerçekten videolarınızı çok faydalı buldum. Emeğiniz için teşekkür ederim.

  • @ugurcimenoglu1728
    @ugurcimenoglu1728 Рік тому +2

    Emeğiniz sağlık hocam...

  • @Fds704
    @Fds704 Рік тому +1

    Emeğinize sağlık hocam, çok teşekkürler

  • @baturhankahraman426
    @baturhankahraman426 Рік тому +1

    Çok teşekkürler, emeğinize sağlık.

  • @hikmetfazila6299
    @hikmetfazila6299 8 місяців тому +1

    emeğinize sağlık hocam

  • @oguzhanylmaz4586
    @oguzhanylmaz4586 Рік тому +1

    Hocam bunu kodlamaya gecirseniz daha guzel olurdu. Cunku boyle anlatan bircok kanal mevcut.

    • @TechBuddyTR
      @TechBuddyTR  Рік тому

      Kodlaması çok daha basit bunun aslında. Ancak ikisini tek videoda yapmak videoyu çok uzatacaktı. Belki başka bir videoda çözümü anlatabilirim.

  • @sametpolat7741
    @sametpolat7741 Рік тому

    Çok güzel bir anlatım olmuş devamını bekliyoruz

  • @ilkerkaraca3665
    @ilkerkaraca3665 Рік тому

    Hocam ilk konunun teorisini anlatıp arkasında uygularsanız süper bir seri olur.

    • @TechBuddyTR
      @TechBuddyTR  Рік тому +1

      Aynı video olduğunda çok uzuyor video, o zaman da kimse izlemiyor :) Belki ayrı bir videoda çekeriz :)

  • @hasankoc1459
    @hasankoc1459 Рік тому +1

    Emeğinize sağlık hocam.

  • @burakkepuc
    @burakkepuc Рік тому +1

    Beyaz tahta çok öğretici oluyor

  • @DobreLi
    @DobreLi 9 місяців тому

    Üniversitede anılarım canlandı. Ne kadar çok algoritma çıkmış aklımdan.

  • @mervetanrsever4115
    @mervetanrsever4115 6 місяців тому

    Hocam F'e gitmenin 2 yolu da aynı maliyette olduğu için orada bir kargaşa çıktığını hissediyorum. Bir kontrol edebilir misiniz acaba ben mi bir şey kaçırıyorum. yani en kısa mesafe hem A>B>D>F>C hem de A>B>E>F>C .

    • @TechBuddyTR
      @TechBuddyTR  6 місяців тому

      Doğru F ye ulaşmanın 2 yolu var. Bu algoritma kısayı bulduktan sonra seçenekleri değerlendiriyor. Ancak yine aynı algoritma kullanılarak diğer tüm alternatifler bulunarak içinden en kısa olanları alternatif olarak da gösterilebilir.

  • @ferhatkorum23
    @ferhatkorum23 Рік тому +1

    basit ve güzel bir algoritma örneğini bizimle paylaştığınız için teşekkürler basit olduğunu anlatış tarzınızdan çıkardık , devamını bekliyoruz hocam :)

  • @dogus8662
    @dogus8662 Рік тому

    Hocam bu konudan bağımsız bir sorum var çok merak ediyorum milyon kullanıcısı olan uygulamalar veritabanını nasıl loadbalance yapıyor ? ben amerikadan bir kullanıcı isem database amerikadaysa , türkiyedeki bir kullanıcı search yaptığında beni nasıl bulabilir? eğer tüm databaselerde sorgu çalışırsa loadbalance'in anlamı kalmıyor yük tüm dünyaya yayılmış olacak. araştırdım kaynak bulamadım. Kaynak önerirseniz dili hiç farketmez almanca da olur öğrenmek istiyorum bu konuyu.

  • @aydoganpederli
    @aydoganpederli Рік тому +1

    Emeğine sağlık hocam

  • @semihartan
    @semihartan Рік тому +1

    Hocam ben Github linki koyacağım fakat UA-cam siliyor maalesef.

    • @TechBuddyTR
      @TechBuddyTR  Рік тому

      Bazı durumlarda youtube yapıyor böyle şeyler maalesef.

  • @idincern
    @idincern Рік тому +1

    Hocam öncelikle sade anlatım için teşekkürler.
    Kafama takılan şöyle bir soru var: A -> B -> E -> F -> C yolunun maliyeti de 12 oluyor. Algoritmada minimum fonksiyonunu kullandığımız için bu yolu eledik; ama eşit maliyetli olduğu için bu yolu da değerlendirememiz gerekmez miydi?

    • @TechBuddyTR
      @TechBuddyTR  Рік тому +1

      Ancak A -> B -> E yapdığımızda daha sonraki yolun kısa olup olmadığını bilmediğimiz için bu tercihi yapmıyoruz. Uygulama verimliliğini arttırmak için bu tarz seçimleri erkenden yapmak durumunda kalabiliyoruz.

    • @idincern
      @idincern Рік тому

      @@TechBuddyTR anladım hocam, teşekkür ederim.

  • @Nathan-vt4zw
    @Nathan-vt4zw Рік тому +1

    merhaba bir projem var genel olarak " Your ant colony must move from on point to another. How do you do it in the shortest time possible? This project will get you acquainted with graph traversal algorithms: your program will have to intelligently select paths and precise movements used by the ants " böyle bir şey istiyor dijkstra algoritması kullanabilir miyim

  • @kritikyorumer
    @kritikyorumer Рік тому

    Yöneyleme göstermediğimiz alakaya burda 'Vay' diyerek hayıflandım. üniversite notlarımı almaya ineceğim galiba.

  • @muhammedzayif3127
    @muhammedzayif3127 Рік тому

    Elinize sağlık. Bu ve bunun gibi yöntemleri öğrenmek, karşılaştığımız sorunlara çözüm bulurken nasıl düşünebileceğimize örnek olacaktır. Teşekkürler.

    • @TechBuddyTR
      @TechBuddyTR  Рік тому

      Elbette öyle. Bakış açısını genişleten uygulamalar/algoritmalar bunlar.

  • @ismailaricioglu
    @ismailaricioglu Рік тому +1

    Teşekkürler.

  • @SercihanEsadUsta
    @SercihanEsadUsta Рік тому +1

    Emeğine sağlık güzel olmuş

  • @mehmetyilmaz4706
    @mehmetyilmaz4706 11 місяців тому +1

    cok iyi hocam devamm

  • @umutkose305
    @umutkose305 Рік тому +1

    Hocam a'dan bye gitmenin yolu 2 c ye ise 8 ken ben diyelim ki a'dan bye gitmek daha mantıklı olduğu için onu seçtim fakat diyelimki d'ye gidecekken b'den d 'ye giden yol 20 birim c'den giden yol 5 birim olursa bu algoritmaya göre a->(2)b->(20)d a->(8)c->(5)d seçilen yol a,b,d üzerinden olacak ve yol uzayacak

    • @TechBuddyTR
      @TechBuddyTR  Рік тому

      Bizim hedefimiz A dan C ye gitmekti. Eğer D ye gidiyor olsaydık, algoritmayı ona göre çalıştıracaktık. Eğer yolda karar veriyorsanız, tüm bu algoritmayı bulunduğunuz konum için yeniden çalıştırmak gerekcekti. Umarım doğru anlamşımdır anlatmaya çalıştığınızı

  • @muharsln
    @muharsln Рік тому

    Bir junior backend developer olarak, bu tip algoritmaların günlük hayatta ne gibi yerlerde kullanılması gerektiğine dair bir senaryo, kafamda canlanmıyor. Örneğin bir e-ticaret yada banka sistemlerinde ne gibi bir ihtiyacı karşılıyor? Bir örnek verebilecek olan varsa çok memnun olurum :)

    • @ismailkarpuz8096
      @ismailkarpuz8096 Рік тому +1

      Tamamen ihtiyaca yönelik aslında, genellikle gezgin satıcı problemi ile daha anlatılabilir oluyor bu tip algoritmalar. Bir örnek olarak kargo veya kurye işlemlerinin olduğunu düşünelim, gün içinde gideceği birden fazla rota olabilir, bu rotalar arasında en kısa mesafe, en düşük yakıt, en az eğim vb gibi kıyaslarda kullanılabilir.

    • @TechBuddyTR
      @TechBuddyTR  Рік тому +1

      Farketmediğimiz birçok alanda kullanılan algoritmalar bunlar. Junior ken ve şu an çalıştığınız şirkette kullanmanız gerekmeyebilir belki ama uygulama verimliliğinin ön planda olduğu şirketlerde bir hayli kullanılır bu tarz algoritmalar. En temelde, TCP protokolü üzerinden network yapılandırılması yapılır ve tcp üzerinden paketler gönderilir. Daha karmaşık network yapılarında, sunucular arası paketlerin daha hızlı gidebilmesi için bu tarz algoritmalar, sunucular arası en kısa yolları bulur mesela.

    • @muharsln
      @muharsln Рік тому

      @@TechBuddyTR network tarafını düşününce gayet mantıklı geldi şimdi hocam. Doğal olarak isteklerin ve sonuçların hızlı gelmesi gerek. Teşekkür ederim :)

    • @muharsln
      @muharsln Рік тому

      @@ismailkarpuz8096 size de çok teşekkür ederim hocam. Bilgilendirdiniz beni :)

  • @naibresidov9662
    @naibresidov9662 Рік тому +1

    Hocam !!! Super

  • @emredogan3094
    @emredogan3094 10 місяців тому

    Yöneylem araştırması (:

  • @justetk
    @justetk Рік тому

    Çok güzel içerik!

  • @alioglu_
    @alioglu_ Рік тому +2

    Hocam yks mat sorusunu siz mi hazırlıyorsunuz 😁

    • @TechBuddyTR
      @TechBuddyTR  Рік тому

      Henüz hazırlamadım ama talep gelirse hazırlayayım :-P

  • @aminebozan-d4j
    @aminebozan-d4j 11 місяців тому

    hocam yanlış çözdünüz 7 +3 =11 dediniz ve e noktasını seçmediniz bu yüzden başka nokta seçtiniz ve yanlış buldunnuz

  • @5ura_999
    @5ura_999 2 місяці тому

    Thanks🙏❤

  • @isimbulamadmobenibulsun660
    @isimbulamadmobenibulsun660 Рік тому

    bunla a* arasinda hangisini ne duruma gore tercih etmeliyiz

  • @aksymrt
    @aksymrt Рік тому +1

    👏Arşivlik

  • @olcaytoperez
    @olcaytoperez Рік тому

    Nokta demiycez, node diycez.
    Bağlantı demiycez, edge diycez.

    • @semihartan
      @semihartan Рік тому

      Node nokta demek değil düğüm demek.

  • @batusulun7297
    @batusulun7297 11 місяців тому

    Çok ama çok kötü anlatım. İnsana bildiğini unutturur...

    • @TechBuddyTR
      @TechBuddyTR  11 місяців тому

      Teşekkürker. Daha iyi kaynakları paylaşabilirseniz, insanlar faydalansın

  • @elimelimopelek
    @elimelimopelek Рік тому +1

    Teşekkürler.