BLACKFAN Posted May 5, 2013 Share Posted May 5, 2013 arkadaşlar aşağıdaki koda bakarak algoritmanın çalışma mantıgı hakkında beni bilgilendirebilir misiniz? c# bilgim cok sınırlı programı anlayıp c de yazacagım internette ingilizce olarak acıklama yapılmıs pek istedğim sonuca ulasamadım kod bilgisi olan arkadaşlardan yardımlarını rica ediyorum namespace Rabin_Karp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } int i = 0; string karakter_tut; private int RabinKarp_Arama_Algorithm(int A, int B) { int n = richTextBox1.TextLength;// girilen metin uzunlugu int m = textBox1.TextLength;// Aranılacak dizgi uzunlugu int h = (int)(Math.Pow(A, m - 1.0) % B); int p = 0; int t0 = 0; if (n < m) { richTextBox2.Text = "Aranılan dizgi girilen metin boyutundan büyük!!"; } for (i = 0; i < m; i++) { p = (int)((A * p + textBox1.Text[i]) % B); t0 = (int)((A * t0 + richTextBox1.Text[i]) % B); } karakter_tut = i.ToString(); int ts = t0; for (int s = 0; s <= n - m; s++) { if (p == ts) { if (textBox1.Text == richTextBox1.Text.Substring(s, m)) { return s;// karşılaştırma sonucucnu geriye döndür } } if (s < n - m - 1) { ts = (int)((A * (ts - (richTextBox1.Text[s]) * h) + (richTextBox1.Text[s + m])) % B); if (ts < 0) { ts += B; } } } return -1; } private void button1_Click(object sender, EventArgs e) { richTextBox2.Text = "-------------------------------- Karp Rabin Arama Algoritma -----------------------------------\n\n"+"Karakter Yeri: " + RabinKarp_Arama_Algorithm(256, 256).ToString() + ". karakter"; } private void Form1_Load(object sender, EventArgs e) { } private void button2_Click(object sender, EventArgs e) { textBox1.Clear(); richTextBox1.Clear(); richTextBox2.Clear(); } } } Quote Link to comment Share on other sites More sharing options...
SimpsoN_Bart Posted May 5, 2013 Share Posted May 5, 2013 (edited) Bu algoritmayı hatırlıyorum List <> yapılarını kurcalarken uğraşmıştım çok güvenilir bir algoritma değil en azından performans sağlamıyordu sanırım. Yaptığı iş bir ya da birkaç dizinin daha büyük bir dizi ya da metin içindeki yerinin bulunmasını sağlamak.Yukarıda değişken uzunluklu kodlama yöntemi kullanıldığından n. karakteri bulmak zorlaşır. Verdiğin kodlarda açıklama var zaten richTextBox1 a girilen metin uzunluğunu n de tutuyorsun aynı şekilde textBox1 e girilen dizinin uzunluğunuda m de tutuyorsun sonra n in içinde m değerini arıyor n küçükse m den hata uyarı veriyor sonra sonucu sana geri dönüyor bu kadar buton2 de textleri temizliyor yani :) C de yazacaksan da ; int dizi[7] = {1, 3, 4, 7, 10, 12, 15}; int aranan = 12; int bas = 0; int son = 6; int i; while (bas <= son) { i = (bas + son)/2; if (dizi[i] == aranan) return i; else if (dizi[i] > aranan) son = i - 1; else bas = i + 1; } return (-1); // bulunamadi Kolay gelsin. Edited May 5, 2013 by SimpsoN_Bart Quote Link to comment Share on other sites More sharing options...
BLACKFAN Posted May 5, 2013 Author Share Posted May 5, 2013 (edited) Bu algoritmayı hatırlıyorum List <> yapılarını kurcalarken uğraşmıştım çok güvenilir bir algoritma değil en azından performans sağlamıyordu sanırım. Yaptığı iş bir ya da birkaç dizinin daha büyük bir dizi ya da metin içindeki yerinin bulunmasını sağlamak.Yukarıda değişken uzunluklu kodlama yöntemi kullanıldığından n. karakteri bulmak zorlaşır. Verdiğin kodlarda açıklama var zaten richTextBox1 a girilen metin uzunluğunu n de tutuyorsun aynı şekilde textBox1 e girilen dizinin uzunluğunuda m de tutuyorsun sonra n in içinde m değerini arıyor n küçükse m den hata uyarı veriyor sonra sonucu sana geri dönüyor bu kadar buton2 de textleri temizliyor yani :) C de yazacaksan da ; int dizi[7] = {1, 3, 4, 7, 10, 12, 15}; int aranan = 12; int bas = 0; int son = 6; int i; while (bas <= son) { i = (bas + son)/2; if (dizi[i] == aranan) return i; else if (dizi[i] > aranan) son = i - 1; else bas = i + 1; } return (-1); // bulunamadi Kolay gelsin. teşekkür ederim yardımın için yalnız kafama takılan bu karşılaştırmayı mod alarak yapmış sanırım mod değerini neye göre oluşturuyor onu cıkaramadım? p ve t0 ile başlayan satırlarda ? Edited May 5, 2013 by BLACKFAN Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.