View Full Version : پبدا کردن داده ای که دارای بیشترین فراوانی است
adabyas1g17
جمعه 23 اردیبهشت 1390, 09:33 صبح
با سلام من برنامه ای را نوشته ام که 1000 عدد تصادفی تکراری تولید کرده و آنها را مرتب کرده و در داخل یک listbox قرار می دهد حالا می خواهم داده ای را که دارای بیشترین فراوانی است را بدست آورم چگونه؟
مثلاً
2
2
3
3
3
4
4
4
4
که عدد 4 دارای بیشترین فراوانی است
returnx
جمعه 23 اردیبهشت 1390, 10:24 صبح
بدترین الگوریتم میتونه این باشه ، البته یکهو به ذهنم خطور کرد گفتم بگم شاید خالی از لطف نباشه:
شما بیاین برای هر عدد یک خونه از آریه در نظر بگیرید و بعد بیاید اعداد رو بخونید مثلا اگه عدد 2 رو هر بار که خوندید به اندیس 2 آرایه یکی اظافه کنید...
خوب برای اینکه حافظه به هدر نره می تونید از Redim استفاده کنید که باز هم این مشکل بوجود میاد چطوری؟ اینجوری:
فرض کنید اول عدد 2 خونده میشه بعد آرایه شما میشه دو خونه ای از یک تا 2 بعد عدد چهار خونده میشه آرایه شما میشه 4 خونه ای و یعنی از خونه یک تا 4 اما فرض کنید که تمام اعداد خونده شد و عدد 3 تو اعداد نبود ، حالا ما 4 بایت حافظه رو الکی اشغال کردیم...
اما در کل این روش جواب میده ولی خوب یک سری عیب هم داره که البته در سیستم های الان 4 بایت خیلی زیاد نیست!!
بعدش هم که مشخصه ، تعیین می کنید کدوم خونه بزرگترین عدد رو داره ...
موفق باشید...
quiet_programmer
جمعه 23 اردیبهشت 1390, 13: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.