Posts Tagged :

string

Levenshtein Distance Algorithm 1024 668 mezo

Levenshtein Distance Algorithm

Hello my fellow Padawans 

Couple days ago I had to use an algorithm for comparing string and I want to write something about Levenshtein Algorithm. This algorithm is for measure the metric distance between 2 string text. Informally, the Levenshtein distance between two words is the minimum number of single-character edits (insertions, deletions or substitutions) required to change one word into the other. It is named after the Soviet mathematician Vladimir Levenshtein, who considered this distance in 1965.

Mathematically, the Levenshtein distance between two strings a, b (of length |a| and |b| respectively) is given by leva,b(|a|,|b|)

where 1(ai≠bi) is the indicator function equal to 0 when ai≠bi and equal to 1 otherwise, and leva, b(i,j) is the distance between the first i characters of a and the first j characters of b.

Note that the first element in the minimum corresponds to deletion (from a to b), the second to insertion and the third to match or mismatch, depending on whether the respective symbols are the same.

We can use this algorithm for string matching and spell checking

This algorithm calculates the number of edit operation that are necessary to modify one string to another string. Fro using this algorithm for dynamic programming we can use these steps :
1- A matrix is initialized measuring in the (m, n) cells the Levenshtein distance between the m-character prefix of one with the n-prefix of the other word.
2 – The matrix can be filled from the upper left to the lower right corner.
3- Each jump horizontally or vertically corresponds to an insert or a delete, respectively.
4- The cost is normally set to 1 for each of the operations.
5- The diagonal jump can cost either one, if the two characters in the row and column do not match else 0, if they match. Each cell always minimizes the cost locally.
6- This way the number in the lower right corner is the Levenshtein distance between these words.

An example that features the comparison of “HONDA” and “HYUNDAI”,

Following are two representations: Levenshtein distance between “HONDA” and “HYUNDAI” is 3.

The Levenshtein distance can also be computed between two longer strings. But the cost to compute it, which is roughly proportional to the product of the two string lengths, makes this impractical. Thus, when used to aid in fuzzy string searching in applications such as record linkage, the compared strings are usually short to help improve speed of comparisons.

Here’s the code that you can use the Levenshtein Distance and calculate percentage between 2 string.

See the Pen levenshtein.js by mzekiosmancik (@mzekiosmancik) on CodePen.

C# – DataTable İçindeki Verilerin Sıralarını Ters Çevirmek 150 150 mezo

C# – DataTable İçindeki Verilerin Sıralarını Ters Çevirmek

Merhaba arkadaşlar
Her yazılımcının korkulu rüyası olan test uzmanı arkadaşlarımdan biri olan Bill bir hata kaydı açmış ve demiş ki şu şu sayfada ki listelenen verilerin sıralamaları yanlış ters olması lazım demiş. Bende ufak bir araştırma sonucu bir metod oluşturarak bu problemi çözdüm ve pratik bir bilgi olması açısından sizlerle paylaşmak istedim.
İşte o kodlar 🙂

[codebox 1]

Bilgiyle Kalın
M.Zeki OSMANCIK

String Char Dizisidir! 920 300 mezo

String Char Dizisidir!

Merhaba arkadaşlar
Çalıştığım şirkette bulunmuş olduğum proje için Senior yani 2 3 yıl deneyimi olan developer arkadaşlar arıyoruz ve bunun ile ilgili müdürüm mülakat görüşmelerine benimde girmemi rica etti bende seve seve kabul ettim. Mülakatta gelen arkadaşlara neler yaptığını sorduğumuzda herkes güzel güzel anlatıyor yaptıklarını iş görüşmesinde göze girmek için hepimizin yaptığı gibi herşeyi anlatıyor anlatmaya gayret ediyor. Ancak

Dikkatimi çeken bir konu var ki işte oda bu yazıyı sizlerle paylaşmak isteyişimin asıl sebebi : Senior olarak alınacak ve daha önce bir çok projede görev almış olan arkadaşlar çok çok çok basit bir sorudan elendiklerinin veya olumsuz bir not aldıklarının farkında değiller. String bir değişken içindeki karakterlerin sayılması ve işlem yapılması ile ilgili bir sorumuz var ve burada herkese hiçbir string metot vs kullanmayın diye de uyarıyoruz tahmin ettiğiniz gibi basit küçük bir algoritma sorusu.
Ne var bunda diyebilirsiniz işte konu bu zaten 🙂 arkadaşların hiç biri string bir char dizisidir deyip bu şekilde foreach ile veya for ile kodunu kağıda dökmeye başlamadı. Herkes bir ipucu verilmesini bekliyor yada farklı yollarla bir array e çevirme işine giriyor.Halbuki ismini yazarken bile aslında bir karakter dizisi kullandığının farkında bile değil.
Küçük ayrıntılar veya bilgiler hayat kurtarır yada iyi yerlere getirebilir.

Unutmayın  String bir Char dizisidir.

Umarım Yararlı Olur ve bunu okuyan arkadaşlar mülakatlarda başvurdukları güzel iş yerlerine sevdikleri işleri yapmak üzere girebilirler.

Bilgiyle kalın

M.Zeki Osmancık

C# _ Diziler _ Foreach Döngüsü 595 199 mezo

C# _ Diziler _ Foreach Döngüsü


Merhaba arkadaşlar bu yazımızda da dizileri anlamaya çalışacağız.  Bu yazı sonunda dzi nedir , nasıl tanımlanır dizilerdeki boyut dizilerin metotları ve foreach döngüsü ile alakalı bilgi sahibi olacaksınız.

Daha önce değişkenler ile ilgili bir yazımız vardı. Hatırlarsak değişkenler program içersinde bize geçiçi süre gerekli olan değerleri tutabildiğimiz yapılardı örneğin int sayi = 5; diyerek 5 sayısını sayi değişkeninde tutabiliyordum. Peki bu sayi değişkeninde birden fazla değer tutmam gerekirse bunu gerçekleştirebilirmiyim ? Cevap değişkenlerle hayır ama Dizilerle evet.

Sizinde anlayacağınız gibi dizi değişkenleri, aynı tipte birçok veriyi bir arada tutmayı sağlar. Benzer işlemlerde kullanılan değişkenler bir dizi altında listelenebilir. Yani ben sayi değişkenimi dizi olarak tanımlarsam o zaman birden fazla değeri içersinde tutabilirim.

Dizilerin tanımını yaptıktan sonra gelin bu dizi nasıl birşeymiş nasıl yazılırmış ona bir göz atalım.  Dizi tanımları veritiplerinin yanında [] simgeleri ile yapılır.

<veri tipi> [] dizi ismi = new <veri tipi> [dizi eleman sayısı]
String[] isimler;İnt[] sayilar;

Float[] paralar;

Byte[] yaslar;

Dizilerin kaç eleman içereceği, dizi tanımlanırken ya da daha sonra belirtilebilir. Şu şekilde tanımlanabilirler:

int[] sayilar = {3, 8, 2, 6};

int[] sayilar = new int[6]{4, 2, 5, 6, 7, 0};

int[] sayilar = new int[5];

Dizilerin indis numaraları 0 dan başlar ve devam eder. Orneğin isimleri tutacağımız bir dizi tanımladık:

string[] isimler = new string[4];

değerlerini atarken yapacağımız işlem şu olacaktır.

İsimler[0]=”Zeki”;

İsimler[1]=” Yudum”;

İsimler[2]=”Ali”;

İsimler[3]=” Orhan”;

Küçük bir dizi uygulaması yapalım. Bir dizi ve elemanlarını tanımlayarak ListBox içersinde bu değeri gösterelim.

İşte bu kadar kolay bir değişken tanımlar gibi fakat içersinde birden fazla değer taşıyabilen bir değişken gibi düşünebiliriz.

Peki birden fazla boyuta sahip diziler tanımlamak mümkünmü ?  Yani tanımladığımız dizinin 1 elemanıda birkaç değere sahip olsa …

Diziler tek boyutlu olduğu gibi, birkaç boyutlu diziler de tanımlanabilir.  Örneğin :

int [,] matris = new int[5,6];

Bu diziyi tanımladığımızda önce 5 elemanlı bir dizi ardından bu dizinin her elemanı içinde 6 elemanlık bir dizi tanımlamış oluruz.  Yani 2 boyut oluşturmuş oluruz.

Bu dizide bir boyut daha olsaydı, o boyutun her elemanı için diğer boyutlardaki 30 eleman bulunacaktı. Çok boyutlu dizilerin eleman sayıları boyutlarındaki eleman sayılarını çarparak hesaplanabilir.

int [,,,,] dizi = new int[boyut1,boyut2,boyut3,… ,boyutn];

Dizilerin boyutlarınada göz attıktan sonra gelin isterseniz bir kaç metodunada bakalım.

Dizilerin Metotları

Array.Resize();

Resize metodu mevcut dizimizin eleman sayısını istediğimiz kadar arttırır. Bir örnekle bakalım bu olaya bir form üzerinde listbox textbox ve butonumuz olsun ve textbox a yazdığımız değer string bir diziye ve listbox a eklensin istiyorum. İlk etapta ne kadar değer girileceğini bilemiyeceğimizden önce 1 elemanlı bir dizi tanımlıyorum ve her eleman eklendiğinde dizi boyutunu arttırıyorum.

Array.Clear();

Dizimiz içersindeki değerleri temizlemek isteyebiliriz işte bu gibi durumlarda Array.Clear kullanıyoruz. Biraz önce yaptığımız proje üzerinde ufak değişikliklerle Clear metodunu inceleyelim.

Foreach Döngüsü

Daha önceki yazımızda bahsettiğimiz döngüler arasında bir tane daha vardı ama ona bu konunun sonunda değinmek daha mantıklı sanki.

Foreach döngümüz bir dizi veya kolaksiyonun her elemanı için yapısındaki kodları çalıştıran bir döngüdür.

foreach (<tip değişkeni > in <koleksiyon> ){

Yapılacak işlemler

}

Bilgiyle Kalın…
M.Zeki Osmancık

C# _ Değişkenler ve Veri Tipleri 507 316 mezo

C# _ Değişkenler ve Veri Tipleri


Merhaba arkadaşlar bu yazımda sizlere değişkenler denilen yapıları anlatmaya çalışacağım. Haydi başlayalım 😉

Değişken nedir nasıl tanımlanır?
Bir program çalıştırırken tüm veriler geçici olarak hafızada tutulur. Değişkenler bu verilerin isimlendirilmesi işlemidir. Değişken mantığı günlük yaşamdada çok kullanılan bir mantıktır aslında. Aklımızdan iki sayı tutmamız istendiğinde ve bu sayılarla alakalı işlem yapmamız istendiğinde aslında isimlendirecek olursak sayi1 ve sayi2 olarak o sayıları aklımızda tutuyoruz. İşte bu sayi1 ve sayi2 sadece o an geçiçi bir süre içinde işlem yapmamız için kafamızda ürettiğimiz değişkenlerdir. Programlamadada geçiçi olarak veri tutmak istediğimizde değişkenleri kullanırız.
<veri tipi> <değişken adı>; şeklinde tanımlanırlar.
string isim;
int rakam;
Tanımlama Kuralları
•Tanımlanan değişkenlerin tipleri değişken isminden önce belirtilir.
•Değişken isimlerini belirlerken bazı noktalara dikkat etmek gerekir. Boşluk, nokta, soru işareti, noktalı virgül, çift tırnak, tek tırnak, aritmetik  operatörler, karşılaştırma ve atama operatörleri, parantezler kullanılamaz.
• Sayı ile başlayamaz.
•Visual C#.NET dilinde tanımlı anahtar kelimeler kullanılamaz.
•Değişken isimlerinde Türkçe karakter kullanılırsa, farklı dil seçenekli işletim sistemlerinde çalışma anında hata üretecektir.

Veri Tipleri

Değişkenler program içinde, tuttukları verilere ulaşmak için kullanılır. Ancak değişkenlere ulaşmak, tanımlandıkları yerde veya alt  bloklarda mümkündür. Bu kavrama değişkenlerin kapsam alanı (Scope) denir.
Kapsam alanı dışındaki bir yerden değişkene ulaşılamaz.

Veri tipi, değişkenlerin tuttukları değerlerin türünü ve bellekte tutulacak boyutunu tanımlar. Değişkenleri veri tipleri ile tanımlarken verinin  boyutuna göre bir veri tipi seçilmelidir. İki tip veri tipi mevcuttur Değer Tipleri (Value Type)  ve Referans Tipleri (Reference Type)

Değer Tipleri (Value Type)

Değer tipleri veriyi direk olarak bellek bölgesinden alırlar

Referans Tipleri (Reference Type)


    Join our Newsletter

    We'll send you newsletters with news, tips & tricks. No spams here.