Şube ve bağlı kullanarak seyahat satıcısı sorunu
Her şehir arasında bir dizi şehir ve mesafe göz önüne alındığında, sorun her şehri tam olarak bir kez ziyaret eden ve başlangıç noktasına geri dönen mümkün olan en kısa turu bulmaktır.
Her şehir arasında bir dizi şehir ve mesafe göz önüne alındığında, sorun her şehri tam olarak bir kez ziyaret eden ve başlangıç noktasına geri dönen mümkün olan en kısa turu bulmaktır.
Sorun: 2 süreç i ve j verildiğinde, herhangi bir ek donanım desteği olmadan ikisi arasında karşılıklı dışlamayı garanti edebilecek bir program yazmanız gerekir.
Rastgele Sıralanmış Diziler Oluşturma Rastgele dizi elemanlarını bir dizide saklıyor ve sonra sıralayıp yazdırıyoruz.
Bir 'n' sayısı ve bir n sayısı verildiğinde, Eşzamanlı Birleştirme Sıralaması'nı kullanarak sayıları sıralayın. (İpucu: shmget, shmat sistem çağrılarını kullanmayı deneyin). Bölüm 1: Algoritma (NASIL?) Biri sol yarı için, biri sağ yarı için olmak üzere yinelemeli olarak iki alt süreç yapın. Bir işlem için dizideki öğe sayısı 5'ten azsa Eklemeli Sıralama gerçekleştirin. Daha sonra iki çocuğun ebeveyni sonucu birleştirir ve ebeveyne geri döner ve bu böyle devam eder. Peki bunu nasıl eşzamanlı hale getirirsiniz? Bölüm 2: Mantıksal (NEDEN?) Bu sorunun çözümünün önemli kısmı algoritmik değil, İşletim Sistemi ve çekirdek kavramlarını açıklamaktır. Eşzamanlı sıralamayı başarmak için iki işlemin aynı dizide aynı anda çalışmasını sağlayacak bir yola ihtiyacımız var. İşleri kolaylaştırmak için Linux, basit API uç noktaları aracılığıyla çok sayıda sistem çağrısı sağlar. Bunlardan ikisi shmget() (paylaşılan bellek tahsisi için) ve shmat() (paylaşılan bellek işlemleri için). Çatalladığımız alt süreçler arasında paylaşılan bir hafıza alanı yaratıyoruz. Her bölüm, sıralanan sol ve sağ çocuklara bölünmüştür; ilginç kısım, aynı anda çalışıyor olmalarıdır! Shmget(), çekirdeğin her iki süreç için de paylaşılan bir sayfa ayırmasını ister. Geleneksel fork() neden çalışmıyor? Cevap fork() fonksiyonunun gerçekte ne yaptığında yatıyor. Belgelere göre 'fork(), çağrı sürecini kopyalayarak yeni bir süreç oluşturur'. Alt süreç ve ana süreç ayrı bellek alanlarında çalışır. fork() zamanında her iki bellek alanı da aynı içeriğe sahiptir. İşlemlerden birinin gerçekleştirdiği bellek yazmaları, dosya tanımlayıcı (fd) değişiklikleri vb. işlemler diğerini etkilemez. Bu nedenle paylaşılan bir hafıza bölümüne ihtiyacımız var.
Pozitif tamsayılardan oluşan bir dizi verildiğinde, dizideki her bir öğeyi, dizideki bitişik öğeler arasındaki fark belirli bir hedefe eşit veya daha az olacak şekilde değiştirin. Yeni ve eski değerler arasındaki farkların toplamı olan düzeltme maliyetini en aza indirmemiz gerekiyor. Temel olarak ?|A[i] - Anew[i]|'yi küçültmeliyiz. nerede 0? Ben ? n-1, n, A[]'nın boyutudur ve Anew[], komşu farkı hedeften küçük veya hedefe eşit olan dizidir. Dizinin tüm elemanlarının M = 100 sabitinden küçük olduğunu varsayalım.
Basamak sayısını temsil eden bir n tamsayısı verilmiştir. The task is to print all n-digit numbers such that the absolute difference between the sum of digits at even positions and odd positions is exactly 1.Note: The number should not start with 0 (leading zeros are not allowed).
+, -,* ve / gibi temel ikili operatörlerden ve bazı tamsayılardan oluşan basit bir ifade ağacı verildiğinde, ifade ağacını değerlendirin.
n basamaklı sayı verildiğinde, basamaklarının toplamı verilen toplamı veren tüm n basamaklı sayıları yazdırın. Çözüm baştaki 0'ları rakam olarak düşünmemelidir. Örnekler:
İki tamsayı dizisi verildiğinde, aşağıdaki kısıtlamaları karşılayarak bunların öğelerini üçüncü diziye ekleyin -
Hem pozitif hem de negatif tam sayılar içeren bir dizi verildiğinde, maksimum çarpım alt dizisinin çarpımını bulun. Beklenen Zaman karmaşıklığı O(n)'dir ve yalnızca O(1) ekstra alan kullanılabilir.
Bir dizi arr[] ve bir k tam sayısı verildiğinde, ardışık k öğelerinin her alt dizisini yerinde ters çevirdikten sonra diziyi bulun. Son alt dizide k'den az öğe varsa, onu olduğu gibi tersine çevirin. Diziyi yerinde değiştirin, hiçbir şey döndürmeyin.
Bir tamsayı listesi verildiğinde, yalnızca liste işlemlerini kullanarak alternatif minimum maksimum öğelerden oluşacak şekilde listeyi yeniden düzenleyin. Listenin ilk elemanı listedeki tüm elemanların minimum, ikinci elemanı ise maksimum olmalıdır. Benzer şekilde, üçüncü öğe bir sonraki minimum öğe olacak ve dördüncü öğe bir sonraki maksimum öğe olacak ve bu böyle devam edecek. Ekstra alan kullanımına izin verilmez. Örnekler:
Bir [n,m] aralığı verildiğinde, verilen aralıkta (n ve m dahil) tek sayıda faktöre sahip olan elemanların sayısını bulun. Örnekler:
n > 3 olmak üzere n boyutunda bir ikili dizi verildiğinde. Dizideki doğru (veya 1) değer etkin, yanlış (veya 0) ise etkin olmadığı anlamına gelir. Bir k sayısı verildiğinde görev, k gün sonra aktif ve inaktif hücrelerin sayısını bulmaktır. Her günün ardından, i'inci hücrenin durumu, eğer sol ve sağ hücreler aynı değilse aktif hale gelir, eğer sol ve sağ hücreler aynı ise (her ikisi de 0 veya her ikisi de 1) pasif hale gelir.
Dizideki her öğenin [1, n] aralığında olduğu n benzersiz tamsayıdan oluşan bir dizi verildiğinde. Dizinin tüm farklı elemanları vardır ve dizinin boyutu (n-2)'dir. Dolayısıyla bu dizide aralıktaki iki sayı eksik. Eksik olan iki sayıyı bulun.
n adet düzgün dağıtılmış değerden oluşan sıralanmış bir dizi verildiğinde arr[], dizideki belirli bir x öğesini arayacak bir fonksiyon yazın. Doğrusal Arama, öğeyi O(n) sürede bulur, Jump Search O(n) sürede ve İkili Arama O(log n) sürede bulur. Enterpolasyon Araması, sıralanmış bir dizideki değerlerin eşit şekilde dağıtıldığı örnekler için İkili Aramaya göre bir gelişmedir. Enterpolasyon, ayrı bir bilinen veri noktaları kümesi aralığı içinde yeni veri noktaları oluşturur. İkili Arama kontrol etmek için her zaman ortadaki öğeye gider. Öte yandan enterpolasyon araması, aranan anahtarın değerine göre farklı konumlara gidebilir. Örneğin, anahtarın değeri son elemana daha yakınsa, enterpolasyon araması büyük ihtimalle aramaya son tarafa doğru başlayacaktır. Aranacak konumu bulmak için aşağıdaki formülü kullanır.
N farklı öğeden oluşan bir dizi verildiğinde. Dizideki minimum iki sayının maksimum çarpımını ve konumlarının mutlak farkını bulun; yani, i ve j'nin 0'dan n-1'e değiştiği abs(i - j) * min(arr[i], arr[j])'nin maksimum değerini bulun.
Pozitif ve negatif sayıları içeren bir dizi verildi. Dizi, sokağın bir ucundan diğer ucuna kadar olan kontrol noktalarını temsil eder. Pozitif ve negatif değerler o kontrol noktasındaki enerji miktarını temsil eder. Pozitif sayılar enerjiyi artırır, negatif sayılar ise azaltır. Enerji seviyesi hiçbir zaman 0 ya da 0'ın altına düşmeyecek şekilde caddeyi geçmek için gereken minimum başlangıç enerjisini bulun.
Bir dize dizisi verildiğinde görev, dizeyi maksimum sayıda benzersiz karakterle yazdırmaktır.