Tag Archives: algoritma

Sayı 2’nin tam kuvveti mi? [İteratif ve Bit manipülasyonu]

Bir sayının 2’nin bir tam kuvveti olup olmadığını nasıl bulabileceğinizi, hem iteratif yolla hem de bit manipülasyon yöntemleri ile anlatmaya çalıştım.

► İkinin kuvveti https://tr.wikipedia.org/wiki/%C4%B0kinin_kuvveti

Matematikte ikinin kuvveti, n bir tam sayı iken 2^n şeklinde gösterilebilen sayıdır. Bu üslü sayıda 2 taban, n ise üstür.

Sadece tam sayılar içinde düşünülecek olursa, n ancak pozitif bir değer alabilir. Bu durumda sonuç, 1, 2 ya da 2’nin belirli kere kendisiyle çarpılmasıyla elde edilen sayı olacaktır.

İki ikili sayı sisteminin de tabanını oluşturduğundan, ikinin kuvvetlerine bilgisayar biliminde sık rastlanır. Bu sistemde ikinin bir kuvveti her zaman onluk sayı sistemindeki onun kuvvetleri gibi 100…000 ya da 0.00…001 benzeri bir şekilde yazılacaktır.

Videodaki metodun text hali şurada: https://pastecode.io/s/RhOXm02CB7

Asal Çarpanları Bulma Algoritması

Bir sayıyı oluşturan asal çarpanların nasıl en efektif şekilde bulunabileceğini anlattım bu videoda. Önemli olan iki nokta var; birincisi kontrol edeceğimiz sayıları verilen sayının kareköküne kadar (karekökü dahil) iterasyon ile kontrol etmek ve elimizdeki sayıyı bölebildiğimiz kadar o sayıya bölmek, ikincisi de eğer bu iterasyon sonrası sayımız 1’e eşit olmadıysa (videoda anlattığım 99 örneği gibi) son kalanı da listeye eklemek.

► Asal çarpan nedir? https://tr.wikipedia.org/wiki/Asal_%C3%A7arpan

Asal çarpan, bir sayının asal olan çarpanlarına denir. Örnek olarak 72 sayısının asal çarpanları 2 ve 3’ken (2^3 * 3^2), 4, 6, 8, 9, 12, 18, 24, 36, 72 asal çarpan değildir. Aritmetiğin temel teoremine göre bütün bileşik sayılar, asal çarpanların çarpımı olarak yazılabilmektedir.

        /// <summary>
        /// Sayının tüm asal çarpanlarını bulma
        /// </summary>
        static IList<int> PrimeFactors(int n)
        {
            var factors = new List<int>();

            for(var i = 2; i <= Math.Sqrt(n); i++)
            {
                while(n % i == 0)
                {
                    n /= i;
                    factors.Add(i);
                }
            }

            if (n != 1)
                factors.Add(n);

            return factors;
        }

Hamming Distance Algoritması Nedir?

Bu video ile, anlatmaya çalışacağım algoritmalara giriş yapıyoruz. Hamming distance algoritması, size verilen iki adet string’in, aynı pozisyondaki karakterlerinden farklı olanların sayısını bulma işlemidir.

Örneğin; “karolin” and “kathrin” string’lerine bakalım. Aynı indislerde olan karakterlere baktığımızda, 2, 3 ve 4. indislerdeki karakterlerin birbiri ile aynı olmadığını görüyoruz. Bu nedenle bu iki string’in hamming distance’ı 3 olmuş oluyor.

kaROLin — “rol”

kaTHRin — “thr”

► Hamming Distance Nedir? https://tr.wikipedia.org/wiki/Hamming_uzakl%C4%B1%C4%9F%C4%B1

Hamming uzaklığı aynı uzunluktaki iki dizenin farklı elemanlarının sayısıdır. Hamming uzaklığı adı Richard Hamming’in adından gelir.

► Hamming distance: https://en.wikipedia.org/wiki/Hamming_distance

In information theory, the Hamming distance between two strings of equal length is the number of positions at which the corresponding symbols are different. In other words, it measures the minimum number of substitutions required to change one string into the other, or the minimum number of errors that could have transformed one string into the other. In a more general context, the Hamming distance is one of several string metrics for measuring the edit distance between two sequences. It is named after the American mathematician Richard Hamming.

        /// <summary>
        /// Verilen iki string arasındaki hamming distance'ı hesaplar.
        /// </summary>
        static int HammingDistance(string s1, string s2)
        {
            if(s1.Length != s2.Length)
            {
                throw new Exception("Strings must be of the same length");
            }

            var diffCount = 0;

            for(var i = 0; i < s1.Length; i++)
            {
                if(s1[i] != s2[i])
                    diffCount++;
            }

            return diffCount;
        }