Dinamik Programlama ile En Uzun Ortak Alt Dizi (LCS): Metin Benzerliğini Adım Adım Bulmak

İki metnin ne kadar benzediğini yalnızca ortak kelimeleri sayarak ölçmek yanıltıcı olabilir. Çünkü sıralama da anlam taşır: "programlama harikadır" ile "harikadır programlama" aynı kelimeleri içerse de dizilişleri farklıdır. En Uzun Ortak Alt Dizi (Longest Common Subsequence, LCS), iki dizideki elemanların sırasını koruyarak bulunabilen en uzun ortak yapıyı hesaplar. Metin karşılaştırma, DNA analizi, sürüm kontrol sistemleri ve dosya farkı araçlarının temelinde bu fikir bulunur.

dinamik-programlama-ile-45

Devamı...

Dijkstra Algoritması ile En Kısa Yol: Öncelik Kuyruğunun Gücü

Bir harita uygulamasının sizi en kısa rotadan götürmesi, ağ paketlerinin hızlı yolu seçmesi veya bir oyundaki karakterin hedefe ulaşması çoğu zaman aynı soruya dayanır: Ağırlıklı bir graf üzerinde iki nokta arasındaki en düşük maliyetli yol nedir? Dijkstra algoritması, kenar ağırlıkları negatif olmadığı sürece bu soruyu sistematik ve oldukça verimli biçimde çözer.

dijkstra-algoritmasi-ile-15

Devamı...

Bitmask Dinamik Programlama: Küçük Kümelerde Büyük Kombinasyonları Yönetmek

bitmask-dinamik-programlama-72

Bazı problemler vardır ki eleman sayısı küçük görünür, fakat olası seçimlerin sayısı astronomiktir. Örneğin 20 şehir arasındaki tüm ziyaret sıralamalarını denemek yaklaşık $20!$ olasılık demektir; bu, kahveniz soğumadan bitecek bir hesap değildir. Bitmask Dinamik Programlama (DP), küçük kümelerdeki alt kümeleri bitlerle temsil ederek tekrar eden hesapları saklar ve bu tür kombinasyon patlamalarını yönetilebilir hâle getirir.

Devamı...

Bellman-Ford Algoritması: Negatif Ağırlıklar ve Döngü Avcılığı

En kısa yol problemleri, haritalardaki rota bulmadan ağ paketlerinin yönlendirilmesine kadar pek çok sistemin kalbinde yer alır. Ancak her yolun maliyeti pozitif olmak zorunda değildir: indirimler, kazançlar veya enerji geri kazanımı gibi senaryolar negatif ağırlıklı kenarlar üretir. Dijkstra bu durumda güvenilirliğini kaybederken Bellman-Ford algoritması sahneye çıkar. Üstelik yalnızca en kısa mesafeleri bulmaz; maliyetin sonsuza kadar azaltılabildiği negatif döngüleri de yakalar.

bellman-ford-algoritmasi-70

Devamı...

Ağ Akışı Problemleri: Ford-Fulkerson ile Maksimum Kapasiteyi Bulmak

ag-akisi-problemleri-82

Bir lojistik ağında kamyonların, internet omurgasında paketlerin veya bir üretim hattında ham maddelerin taşındığını düşünün. Her bağlantının bir kapasitesi vardır ve amaç, başlangıç noktasından hedefe toplamda ne kadar malzeme gönderebileceğimizi bulmaktır. İşte maksimum akış (max flow) problemi tam olarak bu soruyu matematiksel bir modele dönüştürür. Ford-Fulkerson yöntemi ise kapasite sınırlarına çarpmadan akışı adım adım büyüten klasik ve öğretici bir yaklaşımdır.

Devamı...

TypeScript ile Tip Güvenli JavaScript: Büyük Projelerde Hataları Azaltma Rehberi

JavaScript’in esnekliği hızlı prototip üretmek için harikadır; ancak ekip, dosya ve entegrasyon sayısı büyüdükçe bu esneklik pahalı sürprizlere dönüşebilir. TypeScript, JavaScript’in üzerine statik tip katmanı ekleyerek değişkenlerin, fonksiyonların ve veri sözleşmelerinin daha kod çalışmadan doğrulanmasını sağlar. Amaç JavaScript’i “daha katı” yapmak değil; hataları kullanıcıya ulaşmadan, geliştiricinin editöründe yakalamaktır.

Devamı...

Transfer Öğrenme: Dev Modellerin Bilgisini Yeni Problemlere Taşımak

Transfer öğrenme, sıfırdan bir uzman yetiştirmek yerine deneyimli bir uzmanın bilgisini yeni bir göreve uyarlamaktır. ImageNet gibi devasa veri kümeleriyle eğitilmiş bir görüntü modeli; kenarları, dokuları, şekilleri ve nesne parçalarını zaten öğrenmiştir. Bu birikim, az etiketli kedi-köpek fotoğraflarından tıbbi görüntü sınıflandırmaya kadar birçok benzer problemde eğitim süresini, maliyeti ve veri ihtiyacını dramatik biçimde azaltır.

Devamı...

Swift ile iOS Uygulama Mimarisi: Optional ve ARC’nin Görünmeyen Gücü

iOS uygulamalarında iyi mimari yalnızca ekranları MVVM, MVC veya Clean Architecture klasörlerine ayırmak değildir. Asıl kalite; verinin belirsizliğini doğru modellemek ve nesnelerin yaşam döngüsünü güvenle yönetmekle başlar. Swift’in Optional tipi ile Automatic Reference Counting (ARC) sistemi, Apple ekosistemindeki bu iki temel problemi dil seviyesinde ele alır: “Bu değer gerçekten var mı?” ve “Bu nesne artık bellekte kalmalı mı?”

swift-ile-ios-29

Devamı...

Rust ve WebAssembly: Tarayıcıda Yerel Koda Yakın Performans

Web uygulamalarında JavaScript hâlâ merkezdedir; ancak yoğun hesaplama, görüntü işleme, fizik simülasyonu ve sıkıştırma gibi görevlerde tek başına ideal olmayabilir. Rust ile WebAssembly (WASM) ikilisi, tarayıcı içinde güvenli bellek yönetimi ve yerel koda yakın çalışma hızı sunarak bu açığı kapatır. Buradaki amaç JavaScript’i tamamen kovmak değil; arayüzü JavaScript’e, hesaplama motorunu ise Rust’a vermektir.

Devamı...

Rust ile Bellek Güvenliği: Borrow Checker Sahne Arkasında Nasıl Çalışır?

Rust’ın en iddialı vaadi, çöp toplayıcıya ihtiyaç duymadan bellek güvenliği sunmasıdır. Bu vaat; null işaretçileri, use-after-free, veri yarışları ve çift bellek serbest bırakma gibi klasik hataların büyük bölümünü program daha çalışmadan yakalamasına dayanır. Bu işin başrolünde, Rust derleyicisinin sahiplik kurallarını denetleyen titiz bir kapı görevlisi olan borrow checker vardır.

Devamı...

RNN ve Zaman Serileri: Geçmişi Hatırlayan Ağlarla Sıralı Veriyi Okumak

Bir cümlenin sonundaki kelimeyi tahmin ederken önceki kelimeleri, yarının hisse fiyatını öngörürken de dünkü hareketleri görmezden gelemezsiniz. Tekrarlayan Sinir Ağları (Recurrent Neural Network, RNN), tam bu noktada devreye girer: Veriyi tek seferlik bağımsız satırlar olarak değil, zaman içinde akan bir hikâye olarak işler. Dil çevirisi, duygu analizi, sensör verisi ve finansal zaman serileri gibi alanlarda RNN’in süper gücü, önceki adımlardan öğrendiği bilgiyi bir sonraki adıma taşıyan gizli durumudur.

rnn-ve-zaman-50

Devamı...

Pekiştirmeli Öğrenme: Ödül Peşindeki Ajanlar Nasıl Ustalaşır?

Pekiştirmeli öğrenme (Reinforcement Learning, RL), bir ajanın hazır doğru cevaplarla eğitilmek yerine çevresiyle etkileşime girerek öğrenmesidir. Ajan bir durum görür, eylem seçer ve çevreden ödül ya da ceza sinyali alır. Amaç anlık olarak en parlak ödülü kapmak değil, uzun vadede mümkün olan en yüksek toplam getiriyi elde etmektir. Bu yaklaşım, satranç oynayan yapay zekâlardan depo robotlarına kadar oldukça geniş bir kullanım alanına sahiptir.

Devamı...

Overfitting ve Düzenlileştirme: Model Ezberini Bozmanın Akıllı Yolları

overfitting-ve-duzenlilestirme-40

Bir öğrencinin sadece geçen yılın sınav sorularını ezberlediğini düşünün: Aynı sorularda kusursuzdur, fakat soru biçimi biraz değişince bocalar. Makine öğrenmesindeki aşırı öğrenme (overfitting) tam olarak budur. Model, eğitim verisindeki gerçek örüntüleri öğrenmek yerine gürültüyü, istisnaları ve tesadüfi ayrıntıları da belleğine kaydeder. Sonuçta eğitim başarımı yüksek, gerçek hayattaki yeni verilerdeki başarımı ise şaşırtıcı derecede düşük olur.

Devamı...

NLP Temelleri: Kelimelerden Vektörlere, Metinlerden Anlama

Bir bilgisayara “Bu film harikaydı” dediğinizde onun heyecanlanmasını beklemeyiz; fakat cümlenin olumlu bir duygu taşıdığını hesaplayabilmesini isteriz. Doğal Dil İşleme (Natural Language Processing, NLP), insan dilinin kurallı ama bir o kadar da muğlak dünyasını algoritmaların çalışabileceği sayısal temsillere dönüştüren alandır. Arama motorlarından sohbet botlarına, otomatik çeviriden spam filtrelerine kadar pek çok sistemin mutfağında NLP vardır.

Devamı...

Model Dağıtımı ve Edge Yapay Zekâ: Laboratuvardan Cebinize

model-dagitimi-ve-30

Bir makine öğrenmesi modelinin yüksek doğrulukla eğitilmesi, ürün yolculuğunun yalnızca başlangıcıdır. Asıl heyecanlı bölüm, modelin gerçek kullanıcıların fotoğraflarını sınıflandırdığı, sesli komutlarını anladığı veya dolandırıcılık işlemlerini yakaladığı dağıtım (deployment) aşamasıdır. Bu aşamada model; bulutta çalışan bir web API’sine, bir mobil uygulamaya, akıllı saate ya da internet bağlantısı sınırlı bir cihaza yerleştirilir.

Devamı...

LSTM Hücreleri: Unutmayı Öğrenen Ağlarla Uzun Vadeli Hafıza

lstm-hucreleri-unutmayi-95

Bir romanın ilk bölümündeki karakteri son bölümde hatırlamak ya da aylar süren sensör kayıtlarındaki kritik bir değişimi yakalamak, sinir ağları için göründüğünden daha zordur. Standart Tekrarlayan Sinir Ağları (RNN), geçmiş bilgisini gizli durumunda taşısa da uzun dizilerde bu bilgiyi kaybetmeye eğilimlidir. LSTM (Long Short-Term Memory), yani Uzun Kısa Süreli Hafıza hücreleri, hangi bilgiyi saklayacağını, hangisini unutacağını ve ne zaman çıktı üreteceğini öğrenen kapılarıyla bu soruna akıllı bir çözüm getirir.

Devamı...

LLM ve Üretken Yapay Zeka: Kelimeleri Tahmin Eden Dev Zihinler

Büyük Dil Modelleri (Large Language Models, LLM), ilk bakışta insan gibi konuşan sihirli makineler gibi görünür. Perdenin arkasında ise milyarlarca sayısal ağırlık, devasa metin koleksiyonları ve oldukça basit görünen bir hedef vardır: Bir sonraki token’ın ne olacağını tahmin etmek. Bu tahmin görevi; sohbet, özetleme, çeviri, kod üretimi ve hatta adım adım problem çözme gibi şaşırtıcı yeteneklere dönüşür.

Devamı...

Kotlin ile Android Geliştirme Temelleri: Null Güvenliği ve Coroutine Performansı

Android geliştirmede kullanıcıların sabrı, uygulamanın akıcılığı kadar değerlidir: Bir ekran donarsa, en şık arayüz bile puan kaybeder. Kotlin, Java ekosistemiyle uyumunu korurken null güvenliği ve coroutine gibi modern araçlarla bu soruna iki cepheden yaklaşır. İlki beklenmeyen çöküşleri azaltır; ikincisi ise uzun süren işleri ana iş parçacığını kilitlemeden yürütür. Bu ikiliyi doğru anlamak, yalnızca daha temiz kod değil, daha güvenilir ve hızlı hissedilen uygulamalar üretmenin temelidir.

Devamı...

Kara Kutudan Cam Kutuya: Yapay Zeka Etiği ve XAI

Yapay zeka sistemleri kredi başvurularından işe alıma, tıbbi önceliklendirmeden içerik önerilerine kadar hayatı etkileyen kararlar veriyor. Ancak yüksek doğruluk oranı, tek başına güvenilirlik anlamına gelmez: Bir modelin neden belirli bir sonucu ürettiğini anlayamıyorsak, hatayı, önyargıyı ve sorumluluğu da izleyemeyiz. Açıklanabilir Yapay Zeka (XAI), bu kara kutuyu herkesin tüm matematiğini ezberlemesini beklemeden denetlenebilir bir “cam kutuya” dönüştürme çabasıdır.

kara-kutudan-cam-47

Devamı...

Julia ile Bilimsel Hesaplama: Python’a Karşı Hız Yarışı

Bilimsel hesaplamada hız yalnızca “kod ne kadar çabuk bitti?” sorusu değildir; algoritma, bellek erişimi, derleyici ve kullanılan kütüphanelerin ortak sonucudur. Julia, MATLAB benzeri okunabilir sözdizimini derlenen bir dilin performans hedefiyle birleştirirken; Python çoğunlukla NumPy, SciPy ve Numba gibi araçlarla yüksek performansa ulaşır. Doğru karşılaştırma, saf döngüler ile vektörleştirilmiş işlemleri birbirinden ayırmayı gerektirir.

Devamı...