Kar optimizasyonlu iş zamanlama, matris zincir çarpım sırasını belirleme ve bütçe kısıtlı sistem güvenilirlik tasarımı gibi ardışık kar problemlerini çözmeyi amaçlar.
Zamanlama ve Zincir Optimizasyonu, sınırlı kaynakların veya hesaplama adımlarının en yüksek kar veya en düşük maliyet getirecek biçimde planlanmasıdır.
Teslim Tarihli İş Sıralama (Job Sequencing with Deadlines), her işin bir süresi, son teslim tarihi (deadline) ve getirisi olduğu durumda, işleri çakışmayacak şekilde zamanlayarak karı maksimum yapan açgözlü (greedy) bir algoritmadır.
Matris Zincir Çarpımı (Matrix-Chain Multiplication), bir dizi matrisi çarparken yapılacak skaler çarpım sayısını en aza indiren dinamik programlama yöntemidir. Güvenilirlik Tasarımı (Reliability Design) ise sistemdeki bileşenlerin yedekli kopyalarını oluşturup, bütçe sınırları dahilinde toplam sistem güvenilirliğini maksimize eden DP yaklaşımıdır.
Aşağıdaki uygulamalar PDF kaynaklarındaki pseudo kod akışını modern veri yapılarıyla ifade eder. Kenar durumları görünür bırakıldığı için örnekler doğrudan test edilebilir.
1export interface Job {2 id: string;3 deadline: number;4 profit: number;5}67export function jobSequencing(jobs: Job[]): { sequence: string[]; totalProfit: number } {8 // Sort by profit descending9 const sorted = [...jobs].sort((a, b) => b.profit - a.profit);10 const maxDeadline = Math.max(...jobs.map(j => j.deadline));11 12 const slots = new Array(maxDeadline).fill(null);13 let totalProfit = 0;14 15 for (const job of sorted) {16 for (let t = Math.min(maxDeadline, job.deadline) - 1; t >= 0; t--) {17 if (slots[t] === null) {18 slots[t] = job.id;19 totalProfit += job.profit;20 break;21 }22 }23 }24 25 return {26 sequence: slots.filter(id => id !== null) as string[],27 totalProfit28 };29}3031export function matrixChainMultiplication(p: number[]): { cost: number; split: number[][] } {32 const n = p.length - 1;33 const m = Array.from({ length: n + 1 }, () => new Array(n + 1).fill(0));34 const s = Array.from({ length: n + 1 }, () => new Array(n + 1).fill(0));35 36 for (let l = 2; l <= n; l++) {37 for (let i = 1; i <= n - l + 1; i++) {38 const j = i + l - 1;39 m[i][j] = Infinity;40 for (let k = i; k < j; k++) {41 const q = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j];42 if (q < m[i][j]) {43 m[i][j] = q;44 s[i][j] = k;45 }46 }47 }48 }49 50 return { cost: m[1][n], split: s };51}Matris boyut dizisi veya iş listesi vererek en düşük çarpım maliyetini ya da en yüksek greedy karlarını hesaplayın.
Matris boyut dizisi veya iş listesi vererek en düşük çarpım maliyetini ya da en yüksek greedy karlarını hesaplayın.
En İyi Durum: O(n log n) - İş Sıralama sıralaması dahil
Ortalama Durum: O(n^3) - Matris Zincir Çarpımı
En Kötü Durum: O(n^3) - Matris Zincir Çarpımı
O(n^2) - Matris Zincir DP tablosu için - Bu algoritmanın karmaşıklığı belirtilmemiş.
Zamanlama ve Zincir Optimizasyonu (Scheduling & Chain Optimization) Algoritması ile benzer veya alternatif olarak değerlendirilebilecek diğer başlıklar: