الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

شرح كود عن hashing

مغلق
بدأه ghith-js في 4 ديسمبر 2011 · 2 رد · 756 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

[l

eft]

This laboratory work was carried out research work with external hashing methods search. The user specifies the size of the input sequence and the amount of address space. After starting the program generates a sequence of predetermined size and performs hashing method of division. Also, the user has the ability to add any value to the hash key and determine which areas of the external memory, it was added. In addition, the user can view the contents of the file specified

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

StreamReader r;

StreamWriter w;

public List<int> sequence;

public int seqsize;

public int hashsize;

public int f;

public void generateInputSeq(int seqsize)

{

Random r = new Random();

sequence = new List<int>(seqsize);

for (int i = 0; i < seqsize; i++)

{

sequence.Add(r.Next(1, 500));

}

}

public void preparing(int hashsize)

{

for (int i = 0; i < hashsize; i++)

{

w = new StreamWriter(i.ToString()+"_"+"0"+".txt");

w.WriteLine("10 ");

w.Close();

}

}

public int gettingHashValue(int key)

{

return key % hashsize;

}

public void insertIn(int index, int key, int offset, int t, string input, int i)

{

string output = "";

output += t.ToString();

while (input != 13)

{

output += input;

i++;

}

output += key.ToString();

output += " ";

w = new StreamWriter(index.ToString()+ "_" +offset.ToString() + ".txt");

w.WriteLine(output);

f = offset;

if (t == 0)

{

offset++;

w.Write(offset.ToString());

w.Close();

w = new StreamWriter(index.ToString() + "_" + offset.ToString() + ".txt");

w.WriteLine("10 ");

}

w.Close();

}

public void hashInsert(int index,int key)

{

int temp;

int k=-1;

int i;

string input, buf;

do

{

buf = "";

i = 0;

k++;

r = new StreamReader(index.ToString()+"_" + k.ToString() + ".txt");

input = r.ReadToEnd();

r.Close();

do

{

buf += input;

i++;

}

while (input != 32);

temp = Convert.ToInt32(buf);

}

while (temp == 0);

insertIn(index, key, k, temp-1, input,i);

}

public void hashing()

{

for (int i = 0; i < seqsize; i++)

{

int hIndex = gettingHashValue(sequence);

hashInsert(hIndex, sequence);

}

}

#2

السلام عليكم ورحمة الله وبركاته.

ملاحظات:

* عند كتابة كود يرجى وضعه داخل

حتى يتسنى للجميع قرأته بسهولة.

* حسب ما أرى أن مكتوب بلغة السي شارب , بالتالي مكانه المناسب في هذا القسم /index.php?showforum=57.

تم تعديل هذه المشاركة بواسطة Rose Muhammed في 4 ديسمبر 2011 في 19:23

((إِنَّ اللَّهَ وَمَلائِكَتَهُ يُصَلُّونَ عَلَى النَّبِيِّ يَا أَيُّهَا الَّذِينَ آمَنُوا صَلُّوا عَلَيْهِ وَسَلِّمُوا تَسْلِيمًا))

#3

السلام عليكم ..

  1. يبدو أن المثال غير كامل ز بحاجة إلى ملفات الدخل ... و شأشرح بعض الأشياء فيه .
  2. المثال يتحدث عن الــ hashing أو التقطيع ..عليك قراءة القسم النظري من الــ Hashing .
  3. لابسط لك الأمر افرض لدينا مجموعة من الأرقام الصحيحة الموجبة 1 و 33 و 55 و 66 و 77 و 89 و نريد البحث عن عدد معين ضمنها حسب التقطيع ... أي نريد تقسيم البيانات إلى مجموعات , و لو سألتك ما هي أفضل طريقة لتقسيم مجموعة من الأعداد إلى عدة مجموعات بحيث اننا عندما نريد البحث عن عدد محدد نعرف المجموعة التي ينتمي إليها مباشرة دون الدخول في المجموعات الأخرى , و هناك بالحقيقة عدة طرق منها مثلا تقسيم الأعداد إلى فردية و زوجية و عندما اطلب منك البحث عن عدد ما , فإنك نحدد هل هو زوجي أم فردي و تبحث في المجموعة المناسبة لذلك , طريقة أخرى مثلا أن نقسم حسب أول خانة أو نقسم حسب ... الخ, و هذا المثال يعتمد على طريقة التقطيع بالتقسيم Hashing by Division , التي تعتمد على ان نختار عدد اسمه مفتاح التقطيع Hash Key و نقوم بوضع كل عدد من الأعداد لدينا في مجموعة حسب باقي فسمة العدد على مفتاح التقطيع , و بالتالي يتم تقسيم الأعداد مهما كانت كبيرة إلى مجموعات عددها يساوي مفتاح التقطيع , و عند البحث عن عدد , نوجد باقي قسمة العدد المراد البحث عنه على مفتاح التقطيع و بالتالي تتحدد المجموعة المطلوب البحث فيها ..(تسمى المجموعة بــ Bucket دلو) .
  4. مثال : نفرض أن مجموعة الأعداد هي 0 1 2 4 49 36 16 25 64 100 81 و مفتاح التقطيع =7 .
    1. 81 تقسيم 7 يساوي 11 و الباقي 4 أي يتم وضع الــ81 في الدلو الــ 4 .
    2. 100تقسيم 7 يساوي 14 و الباقي 2 أي يتم وضع الــ 100 في الدلو 2 .
    3. و هكذا باقي الأعداد , طبعا هناك مشكلة الأخرى هي كيف نوجد العدد ضمن الدلو الواحد , غالبا توضع في سلسلة مرتبة و الشكل التالي يمثل جدول التقطيع للأعداد في المثال و الصورة من الرابط هنا: post-94677-008834800 1323022604_thumb.gi
    4. شرح الكود :
      1. توليد سلسله عشوائية من الأعداد الصحيحة تشبه الأعداد التي في المثال:

        {
        Random r = new Random();
        sequence = new List<int>(seqsize);
        for (int i = 0; i < seqsize; i++)
        {
        sequence.Add(r.Next(1, 500));
        }
        }
        public void generateInputSeq(int seqsize)
      2. تجهيز ملفات الدخل و الخرج , و هي من الشكل 0_0.txt و 1_0.txt ,و هكذا :

        {
        for (int i = 0; i < hashsize; i++)
        {
        w = new StreamWriter(i.ToString() + "_" + "0" + ".txt");
        w.WriteLine("10 ");
        w.Close();
        }
        }
         public void preparing(int hashsize)
      3. الحصول على رقم الدلو .. كما قلنا بباقي القسمة على مفتاح التقطيع :

        {
        return key % hashsize;
        }
         public int gettingHashValue(int key)
      4. ياقي الكود لم افهمه و لكن للتشغيل , ضع زر على الفورم و داخله الكود :

        {

        hashsize = 7;
        seqsize = 6;
        preparing(hashsize);
        generateInputSeq(seqsize);
        hashing();
        }
        private void button1_Click(object sender, EventArgs e)
      5. ثم ادهب إلى مجلد الخرج الخاص بالمشروع لتشاهد ملفات الدخل و الخرج ..

  • كود المثال :

  • using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;


    namespace ArabTeamHashing
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }
    StreamReader r;
    StreamWriter w;

    public List<int> sequence;
    public int seqsize;
    public int hashsize;
    public int f;

    public void generateInputSeq(int seqsize)
    {
    Random r = new Random();
    sequence = new List<int>(seqsize);
    for (int i = 0; i < seqsize; i++)
    {
    sequence.Add(r.Next(1, 500));
    }
    }

    public void preparing(int hashsize)
    {
    for (int i = 0; i < hashsize; i++)
    {
    w = new StreamWriter(i.ToString() + "_" + "0" + ".txt");
    w.WriteLine("10 ");
    w.Close();
    }
    }

    public int gettingHashValue(int key)
    {
    return key % hashsize;
    }

    public void insertIn(int index, int key, int offset, int t, string input, int i)
    {
    string output = "";
    output += t.ToString();
    while (input != 13)
    {
    output += input;
    i++;
    }
    output += key.ToString();
    output += " ";
    w = new StreamWriter(index.ToString() + "_" + offset.ToString() + ".txt");
    w.WriteLine(output);
    f = offset;
    if (t == 0)
    {
    offset++;
    w.Write(offset.ToString());
    w.Close();
    w = new StreamWriter(index.ToString() + "_" + offset.ToString() + ".txt");
    w.WriteLine("10 ");
    }
    w.Close();
    }

    public void hashInsert(int index, int key)
    {
    int temp;
    int k = -1;
    int i;
    string input, buf;
    do
    {
    buf = "";
    i = 0;
    k++;
    r = new StreamReader(index.ToString() + "_" + k.ToString() + ".txt");
    input = r.ReadToEnd();
    r.Close();
    do
    {
    buf += input;
    i++;
    }
    while (input != 32);
    temp = Convert.ToInt32(buf);
    }
    while (temp == 0);
    insertIn(index, key, k, temp - 1, input, i);
    }

    public void hashing()
    {
    for (int i = 0; i < seqsize; i++)
    {
    int hIndex = gettingHashValue(sequence);
    hashInsert(hIndex, sequence);
    }

    }

    private void button1_Click(object sender, EventArgs e)
    {

    hashsize = 7;
    seqsize = 6;
    preparing(hashsize);
    generateInputSeq(seqsize);
    hashing();
    }
    }
    }
    using System;

    post-94677-4026_thumb.gif

    المرفقات
    hash.gif

    تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 4 ديسمبر 2011 في 21:23

    1

    لا إله إلا الله ... محمد رسول الله

    لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

    المعرًف القديم : houssam11350_11350

    من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

    هذا الموضوع مغلق.

    مواضيع مشابهة