امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
جستجوی درخت دودویی با دلفی؟؟؟؟
نویسنده پیام
veyskarami غایب
مدیر بازنشسته
*****

ارسال‌ها: 861
موضوع‌ها: 82
تاریخ عضویت: مرداد ۱۳۸۴

تشکرها : 477
( 2479 تشکر در 611 ارسال )
ارسال: #1
جستجوی درخت دودویی با دلفی؟؟؟؟
دورود
کسی سورسی واسه جستجوی درخت دودویی به زبان دلفی داره؟
میخوام یه عدد رو از این طریق پیدا کنم این سایت هم کامل توضیح داده
http://www.algorithmha.ir/post-%D8%AF%D8...DB%8C.aspx
روش کار رو بلدم تا حدودی هم اجراش کردم و هنوز نتونستم کاملش کنم دوستان اگه سورس کاملی دارن سپاسگذار میشم

۰۹-اسفند-۱۳۹۱, ۱۸:۰۱:۴۲
وب سایت ارسال‌ها
پاسخ
mohamadpk آفلاین
در حال پیشرفت
***

ارسال‌ها: 337
موضوع‌ها: 39
تاریخ عضویت: اردیبهشت ۱۳۸۷

تشکرها : 726
( 661 تشکر در 257 ارسال )
ارسال: #2
RE: جستجوی درخت دودویی با دلفی؟؟؟؟
کاش سورست رو گذاشته بودی

http://delphi.wikia.com/wiki/Basic_Binary_Tree

بعد لطف کن بگو
pre یا in یا pos
کدوم روش رو میخوای برای پیمایش یا سرچ

وطنم ای عشق همیشگی من ایران زمین

شقایق ها گل میکنن دوباره عاشق میشن...........قصه عشق وطن رو به غنچه هاشون میگن


(آخرین ویرایش در این ارسال: ۰۹-اسفند-۱۳۹۱, ۱۹:۱۴:۳۸، توسط mohamadpk.)
۰۹-اسفند-۱۳۹۱, ۱۹:۱۱:۱۵
ارسال‌ها
پاسخ
تشکر شده توسط : veyskarami
veyskarami غایب
مدیر بازنشسته
*****

ارسال‌ها: 861
موضوع‌ها: 82
تاریخ عضویت: مرداد ۱۳۸۴

تشکرها : 477
( 2479 تشکر در 611 ارسال )
ارسال: #3
RE: جستجوی درخت دودویی با دلفی؟؟؟؟
بالا توضیح دادم محمد جان
من قسمت سرچ رو میخوام
نمونه سورسی هم که خودم نوشتم اینه:

کد:
procedure TForm1.Button1Click(Sender: TObject);
var
Max,x,y,z : integer;

begin
       Max:=256;
       x:=17;

while true do
  begin
       if Max > x then
        begin
         y:=Max;
         Max:=Max div 2;
         z:=Max ;
         Memo1.Lines.Add(IntToStr(Max));
        end else break;
  end;


  // marhale dovom az inja shoroo mishe ke jostejoo beyne y ,z hast
  memo2.Lines.Add(inttostr(y));
  memo2.Lines.Add(inttostr(z));
end;

البته مرحله اول رو مطمئنم که درست رفتم مرحله بعدی هم تو خط آخر تگ کردم و توضیح دادم
تو سورس بالا جستجوی من بین 1 و 256 هست که عدد 17 رو جستجو میکنه و نتایج جستجو همزمان توی ممو اضافه میشه

(آخرین ویرایش در این ارسال: ۰۹-اسفند-۱۳۹۱, ۱۹:۵۰:۲۷، توسط veyskarami.)
۰۹-اسفند-۱۳۹۱, ۱۹:۳۱:۲۲
وب سایت ارسال‌ها
پاسخ
mohamadpk آفلاین
در حال پیشرفت
***

ارسال‌ها: 337
موضوع‌ها: 39
تاریخ عضویت: اردیبهشت ۱۳۸۷

تشکرها : 726
( 661 تشکر در 257 ارسال )
ارسال: #4
RE: جستجوی درخت دودویی با دلفی؟؟؟؟
والا مهندس جان این کار کلا اشتباه هست. البته شما استاد ما هستی.
ولی من یه چند تا چیز هست باید بگم.
یک این الان تو درخت نیست.چون درخت چپ و راست داره. این که شما نوشتی شبیه دودویی در آرایه هست.
بازم اگر منظور شما دودویی آرایه باشه هم باز کد بالا اشتباه هست.چون تقریبا چند برابر داره اضافه محاسبه انجام میده.

باز در آخر بگم شما استاد مایی ما جسارت کردیم.

وطنم ای عشق همیشگی من ایران زمین

شقایق ها گل میکنن دوباره عاشق میشن...........قصه عشق وطن رو به غنچه هاشون میگن


(آخرین ویرایش در این ارسال: ۰۹-اسفند-۱۳۹۱, ۲۱:۱۰:۴۸، توسط mohamadpk.)
۰۹-اسفند-۱۳۹۱, ۲۱:۰۸:۲۱
ارسال‌ها
پاسخ
تشکر شده توسط : veyskarami
veyskarami غایب
مدیر بازنشسته
*****

ارسال‌ها: 861
موضوع‌ها: 82
تاریخ عضویت: مرداد ۱۳۸۴

تشکرها : 477
( 2479 تشکر در 611 ارسال )
ارسال: #5
RE: جستجوی درخت دودویی با دلفی؟؟؟؟
میدونم اما این نصف مرحله هست نه کل مراحل این فقط مرحله اول هست
شاید بهم بخندین ولی چند روزیه که دیگه مغزم نمیکشه بچه ها شاید دیگه هیچ وقت نتونم کد بزنم

۱۰-اسفند-۱۳۹۱, ۰۱:۳۶:۵۹
وب سایت ارسال‌ها
پاسخ
veyskarami غایب
مدیر بازنشسته
*****

ارسال‌ها: 861
موضوع‌ها: 82
تاریخ عضویت: مرداد ۱۳۸۴

تشکرها : 477
( 2479 تشکر در 611 ارسال )
ارسال: #6
RE: جستجوی درخت دودویی با دلفی؟؟؟؟
کدی که میخواستم این بود که خودم نوشتمش
کد:
procedure TForm1.Button2Click(Sender: TObject);
const
Bal :  array [1..7] of integer  = (1,32,16,8,4,2,1);
var
i,x,h:integer;
begin
x:=128;
h:=64;
      while true do
       begin
        for i:=Low(Bal) to High(Bal) do
          begin
            if (h+Bal[i]) <= x then
             begin
             h:=h+Bal[i];
             memo1.Lines.Add(inttostr(h));
             if x = h then break;
            end;
          end;
        if x = h then break;
     end;
end;

این کد رو واسه انجین Blind Sql Injection میخواستم که نوشتمش الانم دارم بهینش می کنم

(آخرین ویرایش در این ارسال: ۱۰-اسفند-۱۳۹۱, ۱۵:۱۷:۰۲، توسط veyskarami.)
۱۰-اسفند-۱۳۹۱, ۱۵:۰۸:۳۰
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : lord_viper, mohamadpk
mohamadpk آفلاین
در حال پیشرفت
***

ارسال‌ها: 337
موضوع‌ها: 39
تاریخ عضویت: اردیبهشت ۱۳۸۷

تشکرها : 726
( 661 تشکر در 257 ارسال )
ارسال: #7
RE: جستجوی درخت دودویی با دلفی؟؟؟؟
نقل قول: Blind Sql Injection
مردم از همیشه بهتر کد میزنن. بعد میگن ما نمی تونیم کد بزنیم.
کاش ما هم نمی تونستیم کد بزنیم.

وطنم ای عشق همیشگی من ایران زمین

شقایق ها گل میکنن دوباره عاشق میشن...........قصه عشق وطن رو به غنچه هاشون میگن


۱۰-اسفند-۱۳۹۱, ۲۳:۳۱:۴۷
ارسال‌ها
پاسخ
The.Ghost غایب
مدیر بازنشسته
*****

ارسال‌ها: 461
موضوع‌ها: 201
تاریخ عضویت: مهر ۱۳۸۸

تشکرها : 674
( 354 تشکر در 158 ارسال )
ارسال: #8
RE: جستجوی درخت دودویی با دلفی؟؟؟؟
با سلام. Biggrin


اولين اطلاعات ورودي در ريشه قرار مي گيرد
اطلاعات دوم با ريشه مقايسه شده چنان چهخ کوچک تر از آن باشد در سمت چپ ريشه و گرنه در سمت راست ريشه قرار مي گيرد
اطلاعات بعدي ماننداطلاعات دوم با ريشه مقايسه مي شود چنان چه از آن کوچک تر باشد به سمت چپ و گرنه به سمت راست مي رود
در حرکت به سمت چپ يا راست به هر گره اي که رسيدند با آن گره مثل ريشه عمل مي کنند
عناصر مساوي در درخت قرار نمي گيرند

توجه داشته باشيد که در هر گره اي که هستيد مي توانيد آن را به عنوان ريشه درختي فرض کنيد که
خودش يک زير درخت سمت چپ و يم زير درخت سمت راست دارد
براي آشنايي با شيوه تشکيل درخت دودويي فرض کنيد اعداد زير بايد در درخت قرار گيرند

11 19 4 14 9 2 18


پس از قرار گرفتن اين اعداد در درخت شکل زير درست مي شود
ابتدا عدد يازده وارد شده در ريشه قرار مي گيرد
سپس عدد نوزده وارد مي شود چون بزرگ تر از يازده است در سمت راست آن قرار مي گيرد
سپس عدد چهار وارد مي شود چون از يازده کوچک تر است به سمت چپ مي رود
چون عدد چهارده از يازده بزرگ تر است و در سمت راست مي رود و با نوزده مقايسه مي شود
از آن کوچک تر است و در سمت چپ قرار مي گيرد
عدد نه از يازده کوچک تر است و به سمت چپ مي رور و با چهار مقايسه مي شود
از آن بزرگ تر است و در سمت راست آن قرار مي گيرد
عدد دو از يازده کوچک تر است و به سمت چپ مي رود با چهار مقايسه مي شود
از آن کوچک تر است و در سمت چپ آن قرار مي گيرد
عدد هيجده از يازده بزرگ تر است به سمت راست مي رود و با نوزده مقايسه مي شود از آن کوچک تر است به سمت چپ مي رود
و با چهارده مقايسه مي شود از آن بزرگ تر است و در سمت راست آن قرار مي گيرد

کد:
11

                        4                  19

                    2       9         14

                                           18

ساختار درخت

Type Tree = ^Rec;
     Rec = Record
       Name :  String;
       No : Integer;
       Left : Tree;
       Right : Tree;
     end;
var
  P,S : Tree;




درج در درخت دودويي

New(P);
P^.Left = nil;
P^.Right = nil;
  if (S = nil) then
     S = P;
  else  if (P^.no > S^.no) then
           S^.Right = P;
        else
           S^.Left = P;




پيمايش درخت يک

ملاقات زير درخت سمت چپ
ملاقات ريشه
ملاقات زير درخت سمت راست

Procedure  Inorder(S:Tree)
begin
  if S = nil then
    Exit;
  Inorder(S^.Left);
  Inorder(S^.NO);
  Inorder(S^.Right);
end;



پيمايش درخت دو

ملاقات ريشه
ملاقات زير درخت سمت چپ
ملاقات زير درخت سمت راست

Procedure  Preorder(S:Tree)
begin
  if S = nil then
    Exit;
  Write(S^.NO);
  Preorder(S^.Left);
  Preorder(S^.Right);
end;




پيمايش درخت سه

ملاقات زير درخت سمت چپ
ملاقات زير درخت سمت راست
ملاقات ريشه

Procedure  Postorder(S:Tree)
begin
  if S = nil then
    Exit;
  Postorder(S^.Left);
  Postorder(S^.Right);
  Write(S^.NO);
end;

--------------------------------------------------------------------------------

Type
  Heap = ^Tree;
  Tree = Record
  Nod : Integer;
  Right : Heap;
  Left : Heap;
End;

var
  First : Heap = Nil;


Procedure Add(X:Integer);  //  11  19  4  14  9  2  18
var
  Temp : Heap;
  K : Heap;
  Label L1,L3;
Begin
New(Temp);

if First = Nil then
   begin
     Temp^.Nod:=X;
     Temp^.Right:=Nil;
     Temp^.Left:=Nil;
     First:=Temp;
   end
else
   begin
      K:=First;

      L1: if (K^.Nod < X) then
             begin
               if K^.Right = Nil then
                 begin
                   Temp^.Nod:=X;
                   Temp^.Right:=Nil;
                   Temp^.Left:=Nil;
                   K^.Right:=Temp;
                   GoTo L3;
                 end
               else if K^.Right <> Nil then
                 begin
                   K:=k^.Right;
                   GoTO L1;
                 end;
           end;

         if (K^.Nod > X) then
             begin
               if K^.Left = Nil then
                 begin
                   Temp^.Nod:=X;
                   Temp^.Right:=Nil;
                   Temp^.Left:=Nil;
                   K^.Left:=Temp;
                   GoTo L3;
                 end
               else if K^.Left <> Nil then
                 begin
                   K:=k^.Left;
                   GoTO L1;
                 end;
           end;
   end;
L3:
End;


Procedure Preorder(P:Heap);
Begin
  if P = nil then
   Exit;
  Form1.ListBox2.Items.Add(IntToStr(P^.Nod));
  Preorder(P^.Left);
  Preorder(P^. Right);
End;  //  11  4  2  9  19  14  18

Assembly Language 039

(آخرین ویرایش در این ارسال: ۱۱-اسفند-۱۳۹۱, ۰۴:۵۶:۳۸، توسط The.Ghost.)
۱۱-اسفند-۱۳۹۱, ۰۴:۵۱:۵۸
ارسال‌ها
پاسخ
تشکر شده توسط : veyskarami, lord_viper
veyskarami غایب
مدیر بازنشسته
*****

ارسال‌ها: 861
موضوع‌ها: 82
تاریخ عضویت: مرداد ۱۳۸۴

تشکرها : 477
( 2479 تشکر در 611 ارسال )
ارسال: #9
RE: جستجوی درخت دودویی با دلفی؟؟؟؟
ممنون ولی خودم از یه روش ابتکاری مشکل رو حلش کردم
کلا الگوریتم دیگه ای طراحی کردم و سریع تر از ساختار دودودیی درختی به نتیجه میرسه
به هر حال ممنون

۱۱-اسفند-۱۳۹۱, ۱۲:۳۳:۲۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : The.Ghost


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Question [سوال] ساخت EDITOR مانند دلفی hameds606 3 1,463 ۱۱-خرداد-۱۳۹۸, ۱۰:۰۷:۲۳
آخرین ارسال: lord_viper
  دریافت اطلاعات از سخت افزار در دلفی m59alizadeh 6 7,169 ۰۶-آذر-۱۳۹۵, ۱۳:۰۱:۴۹
آخرین ارسال: lord_viper
  تبدیل کد به دلفی The.Ghost 2 3,691 ۱۶-فروردین-۱۳۹۴, ۲۲:۱۵:۰۴
آخرین ارسال: veyskarami
  ارسال ایمیل با دلفی h_mohamadi 13 10,453 ۱۴-آبان-۱۳۹۳, ۱۸:۰۰:۴۳
آخرین ارسال: babyy
  فیلم آموزش مدیریت استثنائات در دلفی بهروز عباسی 2 3,152 ۳۰-مرداد-۱۳۹۳, ۱۵:۵۳:۰۸
آخرین ارسال: veyskarami
  [سوال] ریجستری در دلفی spase 2 3,045 ۱۸-خرداد-۱۳۹۳, ۱۵:۵۶:۴۷
آخرین ارسال: veyskarami
  کامپوننت ترد در دلفی hesarkhani 2 3,701 ۰۲-اردیبهشت-۱۳۹۳, ۲۲:۰۸:۴۵
آخرین ارسال: The.Ghost
  سورس دلفی lord_viper 46 58,074 ۰۹-دى-۱۳۹۲, ۱۹:۳۸:۳۳
آخرین ارسال: بهروز عباسی
  [آموزشی] 6700 نکته و کد دلفی lord_viper 0 2,940 ۰۴-دى-۱۳۹۲, ۱۰:۰۴:۳۱
آخرین ارسال: lord_viper
  اخبار دلفی lord_viper 10 9,006 ۲۹-مرداد-۱۳۹۲, ۰۲:۰۳:۴۰
آخرین ارسال: veyskarami

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 4 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS