• وبلاگ : پاي سيب
  • يادداشت : perl
  • نظرات : 0 خصوصي ، 68 عمومي
  • ساعت ویکتوریا

    نام:
    ايميل:
    سايت:
       
    متن پيام :
    حداکثر 2000 حرف
    كد امنيتي:
      
      
       1   2   3   4   5      >
     
    + نظريه 

    همانطور که مستحضريد در نظريه زبانها و ماشينها الگوريتمهاي مختلفي بکار ميرود که اکثر آن بصورت دستي و بر روي ورق انجام و ژياده سازي ميشود در ادامه تبديل گرامر NFA به Dfa را مشاهده مينماييد.

    namespace Lex
    {
    /*
     * Class: Nfa2Dfa
     */
    using System;
    using System.Text;
    using System.Collections;
    using BitSet;
    
    class Nfa2Dfa
    {
    /*
     * Constants
     */
    private const int NOT_IN_DSTATES = -1;
    
    /*
     * Function: make_dfa
     * Deion: High-level access function to module.
     */
    //public void make_dfa(Gen l, Spec s)
    public static void MakeDFA(Spec s)
     {
     make_dtrans(s);
     free_nfa_states(s);
    #if OLD_DUMP_DEBUG
     Console.Error.WriteLine(s.dfa_states.Count
    		 + " DFA states in original machine.");
    #endif
     free_dfa_states(s);
     } 
    
    /*
     * Function: make_dtrans
     * Deion: Creates uncompressed CDTrans transition table.
     */
    //private void make_dtrans()
    private static void make_dtrans(Spec s)
     {
     Dfa dfa;
     int nextstate;
    
     Console.Error.WriteLine("Working on DFA states.");
    
     /* Reference passing type and initializations. */
     s.InitUnmarkedDFA();
    
     /* Allocate mapping array. */
     int nstates = s.state_rules.Length;
     s.state_dtrans = new int[nstates];
    
     for (int istate = 0; istate < nstates; istate++)
     {
     /* Create start state and initialize fields. */
    
     Bunch bunch = new Bunch(s.state_rules[istate]);
    
     bunch.e_closure();
     add_to_dstates(s, bunch);
    
     s.state_dtrans[istate] = s.dtrans_list.Count;
    
     /* Main loop of DTrans creation. */
     while (null != (dfa = s.GetNextUnmarkedDFA()))
     {
     Console.Error.Write(".");
    #if DEBUG
     Utility.assert(!dfa.IsMarked());
    #endif
     /* Get first unmarked node, then mark it. */
     dfa.SetMarked();
    
     /* Allocate new DTrans, then initialize fields. */
     DTrans dt = new DTrans(s, dfa);
    
     /* Set dt array for each character transition. */
     for (int i = 0; i < s.dtrans_ncols; i++)
    	{
    	/* Create new dfa set by attempting character transition. */
    	bunch.move(dfa, i);
    	if (!bunch.IsEmpty())
    	 bunch.e_closure();
    #if DEBUG
    	Utility.assert((null == bunch.GetNFASet() 
    			 && null == bunch.GetNFABit())
    			|| (null != bunch.GetNFASet() 
    			 && null != bunch.GetNFABit()));
    #endif
    	/* Create new state or set state to empty. */
    	if (bunch.IsEmpty())
    	 {
    	 nextstate = DTrans.F;
    	 }
    	else 
    	 {
    	 nextstate = in_dstates(s, bunch);
    
    	 if (nextstate == NOT_IN_DSTATES)
    	 nextstate = add_to_dstates(s, bunch);
    	 }
    #if DEBUG
    	Utility.assert(nextstate < s.dfa_states.Count);
    #endif
    	dt.SetDTrans(i, nextstate);
    	}
    #if DEBUG
     Utility.assert(s.dtrans_list.Count == dfa.GetLabel());
    #endif
    #if DEBUG
     StringBuilder sb1 = new StringBuilder(Lex.MAXSTR);
     sb1.Append("Current count = "+s.dtrans_list.Count+"\n");
     for (int i1 = 0; i1 < dt.GetDTransLength(); i1++)
    	sb1.Append(dt.GetDTrans(i1)+",");
     sb1.Append("end\n");
     Console.Error.Write(sb1.ToString());
    #endif
     s.dtrans_list.Add(dt);
     }
     }
     Console.Error.WriteLine("");
     }
    
    /*
     * Function: free_dfa_states
     */
    //private void free_dfa_states()
    private static void free_dfa_states(Spec s)
     {
     s.dfa_states = null;
     s.dfa_sets = null;
     }
    
    /*
     * Function: free_nfa_states
     */
    private static void free_nfa_states(Spec s)
     {
     /* UNDONE: Remove references to nfas from within dfas. */
     /* UNDONE: Don"t free CAccepts. */
     s.nfa_states = null;
     s.nfa_start = null;
     s.state_rules = null;
     }
    
    /*
     * function: add_to_dstates
     * Deion: Takes as input a CBunch with details of
     * a dfa state that needs to be created.
     * 1) Allocates a new dfa state and saves it in the appropriate Spec list
     * 2) Initializes the fields of the dfa state with the information in the CBunch.
     * 3) Returns index of new dfa.
     */
    private static int add_to_dstates(Spec s, Bunch bunch)
     {
     Dfa dfa;
    
    #if DEBUG
     Utility.assert(null != bunch.GetNFASet());
     Utility.assert(null != bunch.GetNFABit());
     Utility.assert(null != bunch.GetAccept() || Spec.NONE == bunch.GetAnchor());
    #endif
    
     /* Allocate, passing Spec so dfa label can be set. */
     dfa = Alloc.NewDfa(s);
    
     /* Initialize fields, including the mark field. */
     dfa.SetNFASet(new ArrayList(bunch.GetNFASet()));
     dfa.SetNFABit(new BitSet(bunch.GetNFABit()));
     dfa.SetAccept(bunch.GetAccept());
     dfa.SetAnchor(bunch.GetAnchor());
     dfa.ClearMarked();
    
    #if OLD_DUMP_DEBUG
     Console.Error.WriteLine("[Created new dfa_state #"+dfa.GetLabel()+"]");
     dfa.dump();
    #endif
    
     /* Register dfa state using BitSet in spec Hashtable. */
     s.dfa_sets[dfa.GetNFABit()] = dfa;
    
    #if OLD_DUMP_DEBUG
     Console.Error.Write("Registering set : ");
     Print_Set(dfa.GetNFASet());
     Console.Error.WriteLine("");
    #endif
    
     return dfa.GetLabel();
     }
    
    /*
     * Function: in_dstates
     */
    private static int in_dstates(Spec s, Bunch bunch)
     {
     Dfa dfa;
    
    #if OLD_DEBUG
     Console.Error.Write("Looking for set : ");
     Print_Set(bunch.GetNFASet());
     bunch.dump();
    #endif
    
     o = s.dfa_sets[bunch.GetNFABit()];
    
     if (null != o)
     {
     dfa = (Dfa) o;
    #if OLD_DUMP_DEBUG
     Console.Error.WriteLine(" FOUND!");
    #endif
     return dfa.GetLabel();
     }
    
    #if OLD_DUMP_DEBUG
     Console.Error.WriteLine(" NOT FOUND!");
    #endif
     return NOT_IN_DSTATES;
     }
    
    #if OLD_DUMP_DEBUG
    /*
     * function: Print_Set
     */
    public static void Print_Set(ArrayList nfa_set)
     {
     int size; 
     int elem;
    
     size = nfa_set.Count;
    
     if (size == 0)
     {
     Console.Error.Write("empty ");
     }
    
     for (elem = 0; elem < size; ++elem)
     {
     Nfa nfa = (Nfa) nfa_set[elem];
     Console.Error.Write(nfa.GetLabel() + " ");
     }
     }
    #endif
    }
    }
    
    + نظريه 

    همانطور که مستحضريد در نظريه زبانها و ماشينها الگوريتمهاي مختلفي بکار ميرود که اکثر آن بصورت دستي و بر روي ورق انجام و ژياده سازي ميشود در ادامه تبديل گرامر NFA به Dfa را مشاهده مينماييد.

    namespace Lex
    {
    /*
     * Class: Nfa2Dfa
     */
    using System;
    using System.Text;
    using System.Collections;
    using BitSet;
    
    class Nfa2Dfa
    {
    /*
     * Constants
     */
    private const int NOT_IN_DSTATES = -1;
    
    /*
     * Function: make_dfa
     * Deion: High-level access function to module.
     */
    //public void make_dfa(Gen l, Spec s)
    public static void MakeDFA(Spec s)
     {
     make_dtrans(s);
     free_nfa_states(s);
    #if OLD_DUMP_DEBUG
     Console.Error.WriteLine(s.dfa_states.Count
    		 + " DFA states in original machine.");
    #endif
     free_dfa_states(s);
     } 
    
    /*
     * Function: make_dtrans
     * Deion: Creates uncompressed CDTrans transition table.
     */
    //private void make_dtrans()
    private static void make_dtrans(Spec s)
     {
     Dfa dfa;
     int nextstate;
    
     Console.Error.WriteLine("Working on DFA states.");
    
     /* Reference passing type and initializations. */
     s.InitUnmarkedDFA();
    
     /* Allocate mapping array. */
     int nstates = s.state_rules.Length;
     s.state_dtrans = new int[nstates];
    
     for (int istate = 0; istate < nstates; istate++)
     {
     /* Create start state and initialize fields. */
    
     Bunch bunch = new Bunch(s.state_rules[istate]);
    
     bunch.e_closure();
     add_to_dstates(s, bunch);
    
     s.state_dtrans[istate] = s.dtrans_list.Count;
    
     /* Main loop of DTrans creation. */
     while (null != (dfa = s.GetNextUnmarkedDFA()))
     {
     Console.Error.Write(".");
    #if DEBUG
     Utility.assert(!dfa.IsMarked());
    #endif
     /* Get first unmarked node, then mark it. */
     dfa.SetMarked();
    
     /* Allocate new DTrans, then initialize fields. */
     DTrans dt = new DTrans(s, dfa);
    
     /* Set dt array for each character transition. */
     for (int i = 0; i < s.dtrans_ncols; i++)
    	{
    	/* Create new dfa set by attempting character transition. */
    	bunch.move(dfa, i);
    	if (!bunch.IsEmpty())
    	 bunch.e_closure();
    #if DEBUG
    	Utility.assert((null == bunch.GetNFASet() 
    			 && null == bunch.GetNFABit())
    			|| (null != bunch.GetNFASet() 
    			 && null != bunch.GetNFABit()));
    #endif
    	/* Create new state or set state to empty. */
    	if (bunch.IsEmpty())
    	 {
    	 nextstate = DTrans.F;
    	 }
    	else 
    	 {
    	 nextstate = in_dstates(s, bunch);
    
    	 if (nextstate == NOT_IN_DSTATES)
    	 nextstate = add_to_dstates(s, bunch);
    	 }
    #if DEBUG
    	Utility.assert(nextstate < s.dfa_states.Count);
    #endif
    	dt.SetDTrans(i, nextstate);
    	}
    #if DEBUG
     Utility.assert(s.dtrans_list.Count == dfa.GetLabel());
    #endif
    #if DEBUG
     StringBuilder sb1 = new StringBuilder(Lex.MAXSTR);
     sb1.Append("Current count = "+s.dtrans_list.Count+"\n");
     for (int i1 = 0; i1 < dt.GetDTransLength(); i1++)
    	sb1.Append(dt.GetDTrans(i1)+",");
     sb1.Append("end\n");
     Console.Error.Write(sb1.ToString());
    #endif
     s.dtrans_list.Add(dt);
     }
     }
     Console.Error.WriteLine("");
     }
    
    /*
     * Function: free_dfa_states
     */
    //private void free_dfa_states()
    private static void free_dfa_states(Spec s)
     {
     s.dfa_states = null;
     s.dfa_sets = null;
     }
    
    /*
     * Function: free_nfa_states
     */
    private static void free_nfa_states(Spec s)
     {
     /* UNDONE: Remove references to nfas from within dfas. */
     /* UNDONE: Don"t free CAccepts. */
     s.nfa_states = null;
     s.nfa_start = null;
     s.state_rules = null;
     }
    
    /*
     * function: add_to_dstates
     * Deion: Takes as input a CBunch with details of
     * a dfa state that needs to be created.
     * 1) Allocates a new dfa state and saves it in the appropriate Spec list
     * 2) Initializes the fields of the dfa state with the information in the CBunch.
     * 3) Returns index of new dfa.
     */
    private static int add_to_dstates(Spec s, Bunch bunch)
     {
     Dfa dfa;
    
    #if DEBUG
     Utility.assert(null != bunch.GetNFASet());
     Utility.assert(null != bunch.GetNFABit());
     Utility.assert(null != bunch.GetAccept() || Spec.NONE == bunch.GetAnchor());
    #endif
    
     /* Allocate, passing Spec so dfa label can be set. */
     dfa = Alloc.NewDfa(s);
    
     /* Initialize fields, including the mark field. */
     dfa.SetNFASet(new ArrayList(bunch.GetNFASet()));
     dfa.SetNFABit(new BitSet(bunch.GetNFABit()));
     dfa.SetAccept(bunch.GetAccept());
     dfa.SetAnchor(bunch.GetAnchor());
     dfa.ClearMarked();
    
    #if OLD_DUMP_DEBUG
     Console.Error.WriteLine("[Created new dfa_state #"+dfa.GetLabel()+"]");
     dfa.dump();
    #endif
    
     /* Register dfa state using BitSet in spec Hashtable. */
     s.dfa_sets[dfa.GetNFABit()] = dfa;
    
    #if OLD_DUMP_DEBUG
     Console.Error.Write("Registering set : ");
     Print_Set(dfa.GetNFASet());
     Console.Error.WriteLine("");
    #endif
    
     return dfa.GetLabel();
     }
    
    /*
     * Function: in_dstates
     */
    private static int in_dstates(Spec s, Bunch bunch)
     {
     Dfa dfa;
    
    #if OLD_DEBUG
     Console.Error.Write("Looking for set : ");
     Print_Set(bunch.GetNFASet());
     bunch.dump();
    #endif
    
     o = s.dfa_sets[bunch.GetNFABit()];
    
     if (null != o)
     {
     dfa = (Dfa) o;
    #if OLD_DUMP_DEBUG
     Console.Error.WriteLine(" FOUND!");
    #endif
     return dfa.GetLabel();
     }
    
    #if OLD_DUMP_DEBUG
     Console.Error.WriteLine(" NOT FOUND!");
    #endif
     return NOT_IN_DSTATES;
     }
    
    #if OLD_DUMP_DEBUG
    /*
     * function: Print_Set
     */
    public static void Print_Set(ArrayList nfa_set)
     {
     int size; 
     int elem;
    
     size = nfa_set.Count;
    
     if (size == 0)
     {
     Console.Error.Write("empty ");
     }
    
     for (elem = 0; elem < size; ++elem)
     {
     Nfa nfa = (Nfa) nfa_set[elem];
     Console.Error.Write(nfa.GetLabel() + " ");
     }
     }
    #endif
    }
    }
    
    + ژنتيك 

    ادغام تک نقطه اي

    <\/h3>

    در اين روش از ميان کروموزوم هاي جمعيت مياني دو کروموزوم را انتخاب مي کنيم . سپس به طور تصادفي نقطه اي از کروموزوم را انتخاب کرده و تمام ژن هاي بعد از اين نقطه را در دو کروموزوم تعويض مي کنيم .

    ادغام دو نقطه اي

    در اين روش نيز از ميان کروموزوم هاي جمعيت مياني دو کروموزوم را انتخاب مي کنيم . سپس به طور تصادفي دو نقطه از کروموزوم را انتخاب کرده و تمام ژن هاي بين اين دو نقطه را در دو کروموزوم تعويض مي کنيم .

    ادغام توسط ماسک

    در اين روش از يک ماسک براي ادغام استفاده مي کنيم . بدين صورت که آرايه را که به تعداد ژن ها داراي عنصر است ايجاد مي کنيم . عناصر اين آرايه فقط مي تواند مقادير صفر يا يک1 بپذيرد . عناصر آرايه ماسک را به طور تصادفي مقدار دهي مي کنيم . حال با استفاده از اين ماسک دو کروموزوم را ادغام مي کنيم . مقدار صفر در آرايه ماسک نشان مي دهد که ژن بايد از کروموزوم اول انتخاب شود . مقدار يک نيز در آرايه ماسک مشخص مي کند که ژن بايد از کروموزوم دوم انتخاب شود .

    روش هاي ياد شده ، روشهايي کلي مي باشند و گاهي اوقات بايد تغييراتي در آنها ايجاد کنيم .

    جهش

    عملگر جهش هنگامي که بر روي کروموزمومي اعمال مي شود باعث بروز جهش در آن کروموزوم مي شود . روش معمول براي جهش تغيير دادن يک يا چند ژن از کروموزوم بطور تصادفي مي باشد .

    + ژنتيك 

    انتخاب

    پس از آنکه عملگر Fitness بر روي جمعيت فعلي انجام پذيرفت ، عملگر Selection کار خود را آغاز مي کند . وظيفه اين عملگر انتخاب کروموزوم هايي از ميان جمعيت فعلي براي ترکيب شدن مي باشد . عملگر Selection از مقادير توليد شده براي هر کروموزوم توسط عملگر Fitness در مرحله قبل استفاده کرده و از ميان جمعيت ، کروموزوم هايي را براي ترکيب شدن انتخاب مي کند . کروموزوم هاي با مقدار Fitness بيشتر شانس بيشتري براي انتخاب شدن خواهند داشت. در صورتي که تعداد جمعيت K کروموزوم باشد ، جمعيت مياني حاصل از اعمال عملگر Selection نيز بايد K کروموزوم داشته باشد . اين بدان مفهوم است که کروموزوم هاي بهتر در جمعيت مياني ممکن است چند بار تکرار شوند .

    روش هاي مختلفي براي انتخاب کروموزوم ها وجود دارد . يکي از معمولترين روش ها روش رقابتي مي باشد . در روش رقابتي دو يا چند کروموزوم را به طور تصادفي انتخاب کرده و از ميان آنها کروموزومي که Fitness آن بهتر از ديگر کروموزوم هاي انتخاب شده باشد ، انتخاب مي شود . اين عمل به تعداد کروموزوم هاي جمعيت اوليه انجام مي شود .

    محصول نهايي عملگر انتخاب جمعيت مياني مي باشد که از اين جمعيت در مراحل بعدي استفاده خواهيم کرد .

    ادغام

    پس از انجام دو مرحله فوق ، شرايط براي ترکيب کروموزوم ها با يکديگر مهيا شده است . عملگر Crossover از کروموزوم هاي جمعيت مياني استفاده کرده و آنها را با هم ترکيب مي کند . عملگر Crossover با اين اميد اقدام به ترکيب کروموزوم ها مي کند که شايد کروموزوم فرزند حاصل از ترکيب دو يا چند کروموزوم پدر بهينه تر باشد .

    ادغام کروموزوم ها نيز روش هاي مختلفي دارد که از اين ميان سه روش از محبوبيت بيشتري برخوردارند :

    1. ادغام تک نقطه اي

    2. ادغام دو نقطه اي

    3. ادغام توسط ماسک
    + ژنتيك 

    الگوريتم ژنتيک ( Genetic Algorithm )

    <\/h2>

    الگوريتم هاي ژنتيک يکي از الگوريتم هاي جستجوي تصادفي است که ايده آن برگرفته از طبيعت مي باشد . الگوريتم هاي ژنتيک در حل مسائل بهينه سازي کاربرد فراواني دارند . به عنوان مثال مي توان به مسئله فروشنده دوره گرد اشاره کرد . در طبيعت از ترکيب کروموزوم هاي بهتر ، نسل هاي بهتري پديد مي آيند . در اين بين گاهي اوقات جهش هايي نيز در کروموزوم ها روي مي دهد که ممکن است باعث بهتر شدن نسل بعدي شوند. الگوريتم ژنتيک نيز با استفاده از اين ايده اقدام به حل مسائل مي کند .

    در الگوريتم هاي ژنتيک ابتدا به طور تصادفي يا الگوريتميک ، چندين جواب براي مسئله توليد مي کنيم . اين مجموعه جواب را جمعيت اوليه مي ناميم . هر جواب را يک کروموزوم مي ناميم . سپس با استفاده از عملگرهاي الگوريتم ژنتيک پس از انتخاب کروموزوم هاي بهتر ، کروموزوم ها را باهم ترکيب کرده و جهشي در آنها ايجاد مي کنيم . در نهايت نيز جمعيت فعلي را با جمعيت جديدي که از ترکيب و جهش در کروموزوم ها حاصل مي شود ، ترکيب مي کنيم . موارد فوق را با جزئيات بيشتري مورد بررسي قرار مي دهيم :

    نحوه نمايش

    براي استفاده از الگوريتم ژنتيک در حل مسائل بايد روشي براي نشان دادن جواب مساله داشته باشيم . در بيشتر مواقع از رشته هاي بيتي يا آرايه ها استفاده مي کنيم . به عنوان مثال براي نشان دادن يک تور در مساله فروشنده دوره گرد مي توان از يک آرايه يک بعدي استفاده کرد . بدين صورت که آرايه به تعداد شهرها داراي عنصر خواهد بود . مقادير موجود در آرايه بيانگر ترتيب شهر ها خواهد بود .

    براي انتخاب ، ترکيب و ايجاد جهش در کروموزوم ها عملگرهاي مختلفي وجود دارد اما غالبا الگوريتم هاي ژنتيک از چهار عملگر زير براي حل مسائل استفاده مي کنند :

    1. Fitness (برازش )
    2. Selection ( انتخاب)
    3. Crossover (ادغام)
    4. (جهش) Mutation

    <\/h2>

    برازش

    <\/h2>

    با استفاده از اين عملگر ، ميزان بهينگي هر کروموزوم را تعيين مي کنيم . به عنوان مثال در مسئله فروشنده دوره گرد ، تورهاي با مسافت کمتر بهينه تر هستند . و يا در مسئله n-وزير تعداد برخوردهاي کمتر باعث بهينگي بيشتر کروموزوم مي شود . بنابراين مي توان نتيجه گرفت که عملگر Fitness براي هر کروموزوم احتمالي را نسبت مي دهد که اين احتمال ، همان احتمال ترکيب شدن کروموزم براي توليد نسل هاي آينده را نشان مي دهد . بديهي است که کروموزوم هاي بهينه تر شانس بيشتري براي ترکيب با ديگر کروموزوم ها خواهند داشت . بنابراين احتمالي که به آنها نيز نسبت مي دهيم بايد بيشتر باشد

    + ژنتيك 

    حل مساله با استفاده از الگوريتم هاي ژنتيک

    براي حل مساله با استفاده از الگوريتم هاي ژنتيک ، ابتدا جمعيت اوليه اي شامل K کروموزوم توليد مي کنيم . هر کروموزوم نشان دهنده جواب مساله خواهد بود . سپس با استفاده از عملگر برازش ميزان مطلوب بودن هر کرموزوم را محاسبه کرده و در مرحله بعد با استفاده از مقادير محاسبه شده در مرحله برازش کروموزوم هايي را انتخاب کرده و جمعيت مياني را توليد مي کنيم . تعداد کروموزوم هاي جمعيت مياني نيز K کروموزوم خواهد بود . در نهايت نيز عملگر جهش بر روي کروموزوم هاي جمعيت مياني اعمال مي شود . پس از اعمال عملگر جهش ، جمعيت مياني جايگزين جمعيت اوليه مي شود . دوباره مراحل برازش ، ادغام و جهش و جايگزيني بر روي آن انجام مي شود . شبه کد زير نحوه انجام مراحل فوق را نشان مي دهد :

    Population = GeneratePopulation(K)

    For I = 1 to MaxIterations

    Fitness(Population)

    If any of chromosomes is optimal Then

    Break

    Offspring = Crossover(Population)

    Mutate(Offspring)

    EndFor

    توابع Fitness ، Crossover و Mutate نيز با توجه به روش هاي شرح داده شده پياده سازي مي شوند .

    <\/h3>

    + اميرحسين 

    Introduction to Algorithms


    مرجع اصلي درس طراحي الگوريتم ها CLRS

    Compiled HTML Help file : Introduction to Algorithms لينک دانلود

    PDF: CLRS لينک دانلود

    + ديكشنري 

    ?- ديکشنري آنلاين انگليسي و فارسي: اين سرويس به شما امکان ترجمه لغات از انگليسي به فارسي و از فارسي به انگليسي را ميدهد و ميتوانيد لغات مرتبط با واژه مورد جستجوتان را نيز در نتايج بينيد.

    ?- ديکشنري آنلاين انگليسي به فارسي و فارسي به انگليسي: اين سرويس همچون سرويس قبل بوده و نيز امکان ترجمه متن را هم براي شما فراهم نموده است.

    ?- ديکشنري آنلاين انگليسي به فارسي نارسيس: اگر با نرم افزار نارسيس کار کرده باشيد حتما از قدرت آن باخبر هستيد. سرويس آنلاين اين نرم افزار نيز به همان قدرت عمل مينمايد.

    ?- ديکشنري آنلاين سريع: يک ديکشنري آنلاين و سريع با محيط ساده و سبک اما با قابليتهاي بالا

    ?- ديکشنري آنلاين آريا: ديکشنري آنلاين فارسي به انگليسي، انگليسي به فارسي و انگليسي به انگليسي که کيبردي هم در خود براي تايپ مستقيم دارد.

    ?- لغتنامه انگليسي به فارسي: با قابليت جستجو کلمات مشابه بصورت همزمان و سرعت بيشتر جستجو با فن آوري Ajax همراه مناسبي براي شما در صفحات انگليسي وب

    ?- ديکشنري رايگاني انگليسي به فارسي: اين ديکشنري علاوه بر ترجمه لغات شما به صورت آنلاين، کدي هم براي درج ديکشنري در قالب وبلاگ شما را در اختيارتان قرار ميدهد.

    ?- ديکفا: اين ديکشنري هم همچون ديکشنري آنلاين قبلي کدي را هم براي درج ديکشنري در قالب وبلاگتان در خود دارد.

    ?- فارس ديکشنري: يک فرهنگ لغت آنلاين و قدرتمند ديگر

    + لينك 
    + .و. 

    طراحي و پياده سازي زبان ها(جزوه)، امام قليزاده------ دانلود

    درسته مال دانشگاه ازاد و بدرد ما پيام نوري ها احتمالا مي گين نمي خوره چون بلاخره ما سطحمون خيلي بالاتر از .... ولي ديدنش خالي از لطف هم نيست

    اصول طراحي پايگاه داده ها(کتاب)، آيت-فراهي----- دانلود

    هوش مصنوعي(کتاب)، عسگرزاده ----دانلود

    ساختمان داده ها(کتاب)، تنها-آيت------- دانلود

    نظريه زبانها و ماشين ها(جزوه)، علامي--- دانلود

    شبکه هاي کاميوتري(کتاب) ،کريم زادگان--- دانلود

    طراحي الگوريتم(کتاب)، نوراله------------ دانلود

    + امرحسين 
    پيش فرض طراحي و پياده سازي زبانهاي برنامه سازي(براي دانشجويان کامپيوتر)

    طراحي و پياده سازي زبانهاي برنامه سازي

    بر اساس کتاب اصول طراحي و پياده سازي زبانهاي برنامه سازي ترجمه جعفرنژاد قمي
    تهيه کننده: مهدي يوسف خاني ( استاده خودمه جزوه اش رو کش رفتم )
    تابستان 8?
    فايل هاي ضميمه
    نوع فايل: rar Tarahi Va Peyadehsazi Zabanha.rar (93.1 کيلو بايت, مشاهده : 1314)
    پيش فرض طراحي و پياده سازي زبانهاي برنامه سازي(براي دانشجويان کامپيوتر)

    طراحي و پياده سازي زبانهاي برنامه سازي

    بر اساس کتاب اصول طراحي و پياده سازي زبانهاي برنامه سازي ترجمه جعفرنژاد قمي
    تهيه کننده: مهدي يوسف خاني ( استاده خودمه جزوه اش رو کش رفتم )
    تابستان 8?
    فايل هاي ضميمه
    نوع فايل: rar Tarahi Va Peyadehsazi Zabanha.rar (93.1 کيلو بايت, مشاهده : 1314)
       1   2   3   4   5      >