View Full Version : پبدا کردن داده ای که دارای بیشترین فراوانی است
  
adabyas1g17
جمعه 23 اردیبهشت 1390, 10:33 صبح
با سلام من برنامه ای را نوشته ام که 1000 عدد تصادفی تکراری تولید کرده و آنها را مرتب کرده و در داخل یک listbox قرار می دهد حالا می خواهم داده ای را که دارای بیشترین فراوانی است را بدست آورم چگونه؟     
مثلاً                                                                              
2
2
3
3
3
4
4
4
4
که عدد 4 دارای بیشترین فراوانی است
returnx
جمعه 23 اردیبهشت 1390, 11:24 صبح
بدترین الگوریتم میتونه این باشه ، البته یکهو به ذهنم خطور کرد گفتم بگم شاید خالی از لطف نباشه:
شما بیاین برای هر عدد یک خونه از آریه در نظر بگیرید و بعد بیاید اعداد رو بخونید مثلا اگه عدد 2 رو هر بار که خوندید به اندیس 2 آرایه یکی اظافه کنید...
خوب برای اینکه حافظه به هدر نره می تونید از Redim استفاده کنید که باز هم این مشکل بوجود میاد چطوری؟ اینجوری:
فرض کنید اول عدد 2 خونده میشه بعد آرایه شما میشه دو خونه ای از یک تا 2 بعد عدد چهار خونده میشه آرایه شما میشه 4 خونه ای و یعنی از خونه یک تا 4 اما فرض کنید که تمام اعداد خونده شد و عدد 3 تو اعداد نبود ، حالا ما 4 بایت حافظه رو الکی اشغال کردیم...
اما در کل این روش جواب میده ولی خوب یک سری عیب هم داره که البته در سیستم های الان 4 بایت خیلی زیاد نیست!!
بعدش هم که مشخصه ، تعیین می کنید کدوم خونه بزرگترین عدد رو داره ...
موفق باشید...
quiet_programmer
جمعه 23 اردیبهشت 1390, 14:28 عصر
با سلام
اول لست رو مرتب کن بعد با استفاده از کد زیر میتونی عددی که داری بیشترین فراوانی هست رو پیدا کنی.
Private Sub Command1_Click()
    Dim FreqNumber As Integer
    Dim FreqCount As Integer
    Dim TFreqNumber As Integer
    Dim TFreqCount As Integer
    Dim i As Integer
    
    FreqCount = 0
    TFreqCount = 0
    i = 0
    
    While (i < List1.ListCount)
        If List1.List(i) = List1.List(i + 1) Then
            TFreqNumber = List1.List(i)
            TFreqCount = TFreqCount + 1
        Else
            If TFreqCount > FreqCount Then
                FreqCount = TFreqCount
                FreqNumber = TFreqNumber
                TFreqCount = 0
                TFreqNumber = 0
            End If
        End If
        i = i + 1
        
    Wend
    MsgBox ("Tedad faraveni:" + Str(FreqCount + 1) + vbCrLf + "Adad daraye faravani:" + Str(FreqNumber))
End Sub
فقط حواست باشه لست باید مرتب باشه.
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.