Turkhackteam.net/org - Turkish Hacking & Security Platform...  
Geri git   Turkhackteam.net/org - Turkish Hacking & Security Platform... >
Genel İçerik
> Off Topic

Off Topic Hertürlü paylaşım ve sohbetin yapılabileceği serbest alan.

Algoritma/Optimizasyon Yarışması 2 - ihan3t

Off Topic

Yeni Konu aç Cevapla
 
Seçenekler
Alt 16-07-2017   #1
  • Offline
  • Yarbay
  • Genel Bilgiler
Üyelik tarihi
Feb 2012
Mesajlar
Konular


  
Algoritma/Optimizasyon Yarışması 2 - ihan3t



Merhabalar herkese, ikinci algoritma yarışması ile yeni bir konuda buluşuyoruz.

Algoritma, "bir sorunun çözümü için tasarlanan işlemler" diye tanımlanabilir. Yazılım dünyasında ise algoritma denildiğinde "akış diyagramı" ndan ziyade, veri yapıları üzerinde yapılan işlemler akla gelir. Örneğin graph gezme algoritmaları, tree algoritmaları, sıkıştırma algoritmaları, görüntü işleme, machine learning, kriptoloji algoritmaları vs vs..

Bu liste çok uzun.

Optimizasyon ise, bir algoritmanın daha performanslı (hem hız, hem bellek açısından) çalışmasını sağlama işlemidir.

Bu konumuzda çok hoş olacağını düşündüğüm bir algoritma ve optimizasyon sorusu soracağım, sonrasında ise çözümünü anlatacağım.

Sorumuz "Fibonacci" üzerine.

Öncelikle fibonacci serisi nedir onu bir göstereyim :

0 1 1 2 3 5 8 13 21 34 55 89 144 . . . . . . .

diye devam eden bir seri.

Serinin hesaplanması ise şöyle. Başlangıç sayılarımız = 0 1

Bu sayılardan başlayarak kendisinden bir önceki sayı ile toplayarak devam ediyoruz.

0 1

0 + 1 = 1
0 1 1

1 + 1 = 2
0 1 1 2

1 + 2 = 3
0 1 1 2 3

şeklinde devam ediyor.

Sanırım burası anlaşıldı.

Soru şu şekilde : "Fibonacci(x) denildiğinde en kısa adım sayısı ve en az bellek kullanımı ile bu sayıyı hesaplayan algoritmayı herhangi bir dil ile yazın"


Not :

Fibonacci(0) = 0
Fibonacci(1) = 1
Fibonacci(2) = 1
Fibonacci(3) = 2
Fibonacci(10) = 55

Not 2 :

Programlama dillerinin hazır fibonacci kütüphanesi ile yapmak yasaktır. Soruda istenen şey algoritmayı sizin implement etmenizdir.


Soru gayet açık. Bu akşam 00:00 da çözümü açıklayacağım.

Katılan arkadaşlara başarılar.

Dipnot : Bu tarz algoritma soruları programlama yeteneğinizin ve algoritma kabiliyetinizin artmasını sağlar, bana ne faydası olacak diye soran kişilere istinaden bunu belirtiyorum.

Çözüm :

Kod:
def mfib(n):
    cache = [-1 for x in range(n+1)]
    cache[0] = 0
    cache[1] = 1

    return fib(n, cache)

def fib(n, cache):
    if cache[n] != -1:
        return cache[n]
    else:
        cache[n] = fib(n - 1, cache) + fib(n - 2, cache)
        return cache[n]
Recursive fibonacci hesaplamasında, (dynamic programming genelde recursive metodlar ile işler) memoization denen bir işlem uyguluyoruz. Yani daha önce hesapladığımız adımları tekrar hesaplamak yerine bir bufferdan/cache den getiriyoruz. Normal fibonacci hesaplamasına göre çok daha performanslı.

Normal fibonacci kodu :

Kod:
def nfib(n):
    if n <= 1:
        return n

    return nfib(n - 1) + nfib(n - 2)
Normal fibonacci hesabında recursive yapıda oluşan node lar :



Memoization işlemi yaptıktan sonra hesaplanacak node lar :



Gördüğünüz gibi oldukça performans sağlıyor, işlem sayısını azaltıyor.

Bu konunun amacı dynamic programming ve memoization işlemini anlatmaktı, fibonacci mantığı anlamak için güzel bir örnek, gerçi fibonacci hesaplaması için matematiksel başka yöntemlerde olduğundan biraz eksik bir örnek gibi gözükebilir fakat görselleri ve kodu inceledikten sonra mantığı anlamanız yeterli. Önemli olan "alt parçalara ayrılabilen problemleri" analiz edip çözebilmek.
    


__________________

Computer Engineer.

Software Development Specialist.

Konu ihan3t tarafından (17-07-2017 Saat 01:35 ) değiştirilmiştir..
Offline
 
Alıntı ile Cevapla
Alt 16-07-2017   #2
  • Offline
  • Forumdan Uzaklaştırıldı
  • Genel Bilgiler
Üyelik tarihi
Jan 2015
Nereden
TÜRKİYE!
Mesajlar
Konular


  


cevabım, matematik...



Kod:
#include <stdio.h>
#include <math.h>

int main()
{
	float step=5000000.0;
	printf("sonuc: %d\n",Fibonacci(&step));
}
int Fibonacci(float *step)
{
	const float kokbes=pow(5.0, 1.0/2.0),x=(1.0+kokbes)/2,y=(1.0-kokbes)/2;
	return (pow(x,*step)-pow(y,*step))/kokbes;
}
    
Offline
 
Alıntı ile Cevapla
Alt 16-07-2017   #3
  • Offline
  • Teğmen
  • Genel Bilgiler
Üyelik tarihi
Jun 2017
Nereden
ice world
Mesajlar
Konular


  


sende hep matematik soruları soruyorsun
adamlar google amcadan buluyor
    


__________________

gören gözler nede güzel görür
ama gerçekler acıdır
yakaza cin kabilesi
Offline
 
Alıntı ile Cevapla
Alt 16-07-2017   #4
  • Offline
  • Yarbay
  • Genel Bilgiler
Üyelik tarihi
Feb 2012
Mesajlar
Konular


  


Alıntı:
TheHEROZ´isimli üyeden Alıntı Mesajı göster
sende hep matematik soruları soruyorsun
adamlar google amcadan buluyor
Aslında soru tam olarak matematik sorusu değil, soruyu fibonacci ile sorduğum için matematiksel formülü mevcut.

Aslında soruda teşvik etmeye çalıştığım şey: dynamic programming - memoization.
    


__________________

Computer Engineer.

Software Development Specialist.
Offline
 
Alıntı ile Cevapla
Alt 16-07-2017   #5
  • Offline
  • Yarbay
  • Genel Bilgiler
Üyelik tarihi
Mar 2017
Yaş
94
Mesajlar
Konular


  


Ah ah bi programlama dili bileydik fakat o tekniğide öğrenmiş oldum fibonnic bilmem ne
0 + 1 = 1
1 + 2 = 3
2 + 3 = 5
5 + 6 = 11
11 + 12 = 23

Bilmemek ayıp değil öğrenmemek ayıptır Saolasın
    


__________________







☾★ Karanlıkta çalışırız ,
Aydınlığa hizmet etmek için. ☾★

666
Offline
 
Alıntı ile Cevapla
Alt 16-07-2017   #6
  • Offline
  • Teğmen
  • Genel Bilgiler
Üyelik tarihi
Jun 2017
Nereden
ice world
Mesajlar
Konular


  


Alıntı:
ihan3t´isimli üyeden Alıntı Mesajı göster
Aslında soru tam olarak matematik sorusu değil, soruyu fibonacci ile sorduğum için matematiksel formülü mevcut.

Aslında soruda teşvik etmeye çalıştığım şey: dynamic programming - memoization.
bence konuları biraz zorlaştıralım matematik sorusu oldumu buluyorlar zaten kodlar internette var
diyorumki daha zor bişe deneyelim tht nin sınirını zorlayalım mesela bi ara c# ile bi program yazmıştım masaüstündeki txt leri aes ile sıfrelyip uzantılarını değiştiriyordu bir daha kine bunu soralım
    


__________________

gören gözler nede güzel görür
ama gerçekler acıdır
yakaza cin kabilesi
Offline
 
Alıntı ile Cevapla
Alt 16-07-2017   #7
  • Offline
  • Yarbay
  • Genel Bilgiler
Üyelik tarihi
Feb 2012
Mesajlar
Konular


  


Alıntı:
Tetrox´isimli üyeden Alıntı Mesajı göster
Ah ah bi programlama dili bileydik fakat o tekniğide öğrenmiş oldum fibonnic bilmem ne
0 + 1 = 1
1 + 2 = 3
2 + 3 = 5
5 + 6 = 11
11 + 12 = 23

Bilmemek ayıp değil öğrenmemek ayıptır Saolasın
Dostum biraz yanlış anlamışsın fibonacci sırasını, tekrar oku istersen konudakini

Alıntı:
TheHEROZ´isimli üyeden Alıntı Mesajı göster
bence konuları biraz zorlaştıralım matematik sorusu oldumu buluyorlar zaten kodlar internette var
diyorumki daha zor bişe deneyelim tht nin sınirını zorlayalım mesela bi ara c# ile bi program yazmıştım masaüstündeki txt leri aes ile sıfrelyip uzantılarını değiştiriyordu bir daha kine bunu soralım
Eğer AES algoritmasını implemente ettireceksek, s-box tasarımını, mix columns işlemlerini vs vs yazdırmak lazım.

Yoksa dilin içerisinde gelen crypto kütüphanesi ile yaptırdıktan sonra bahsettiğin uygulama 1 dakikalık iş.

Aslında baya zor bir challange açmıştım fakat kimse tam anlamıyla başarılı olamadı hatta konu kapatıldı : Gerçek Yazılımcılar Belli Olacak - Teknik Yarışma - ihan3t

Burada birçok kişi zaten soruyu ve çözüm yolunu anlayamadı. Interpreter yapımını anlatacaktım.
Önü kapandı maalesef.

Aslında bu konuda da gayet güzel bir konu işlemeye çalışıyorum, "dynamic programming - memoization" çok güzel bir kon. Araştıranlar anlayacaktır.
    


__________________

Computer Engineer.

Software Development Specialist.
Offline
 
Alıntı ile Cevapla
Alt 16-07-2017   #8
  • Offline
  • Üsteğmen
  • Genel Bilgiler
Üyelik tarihi
Jun 2016
Mesajlar
Konular


  


Alıntı:
ihan3t´isimli üyeden Alıntı Mesajı göster
Dostum biraz yanlış anlamışsın fibonacci sırasını, tekrar oku istersen konudakini



Eğer AES algoritmasını implemente ettireceksek, s-box tasarımını, mix columns işlemlerini vs vs yazdırmak lazım.

Yoksa dilin içerisinde gelen crypto kütüphanesi ile yaptırdıktan sonra bahsettiğin uygulama 1 dakikalık iş.

Aslında baya zor bir challange açmıştım fakat kimse tam anlamıyla başarılı olamadı hatta konu kapatıldı : Gerçek Yazılımcılar Belli Olacak - Teknik Yarışma - ihan3t

Burada birçok kişi zaten soruyu ve çözüm yolunu anlayamadı. Interpreter yapımını anlatacaktım.
Önü kapandı maalesef.

Aslında bu konuda da gayet güzel bir konu işlemeye çalışıyorum, "dynamic programming - memoization" çok güzel bir kon. Araştıranlar anlayacaktır.
Kerdeş azcık türkçe konuşsana implemente ne, mix columns ne, interpreter yapımı ne
    
Offline
 
Alıntı ile Cevapla
Alt 16-07-2017   #9
  • Offline
  • Yarbay
  • Genel Bilgiler
Üyelik tarihi
Mar 2017
Yaş
94
Mesajlar
Konular


  


Alıntı:
ihan3t´isimli üyeden Alıntı Mesajı göster
Dostum biraz yanlış anlamışsın fibonacci sırasını, tekrar oku istersen konudakini



Eğer AES algoritmasını implemente ettireceksek, s-box tasarımını, mix columns işlemlerini vs vs yazdırmak lazım.

Yoksa dilin içerisinde gelen crypto kütüphanesi ile yaptırdıktan sonra bahsettiğin uygulama 1 dakikalık iş.

Aslında baya zor bir challange açmıştım fakat kimse tam anlamıyla başarılı olamadı hatta konu kapatıldı : Gerçek Yazılımcılar Belli Olacak - Teknik Yarışma - ihan3t

Burada birçok kişi zaten soruyu ve çözüm yolunu anlayamadı. Interpreter yapımını anlatacaktım.
Önü kapandı maalesef.

Aslında bu konuda da gayet güzel bir konu işlemeye çalışıyorum, "dynamic programming - memoization" çok güzel bir kon. Araştıranlar anlayacaktır.
Tamamdır şimdi anladım ben bir sonraki sandım
    


__________________







☾★ Karanlıkta çalışırız ,
Aydınlığa hizmet etmek için. ☾★

666
Offline
 
Alıntı ile Cevapla
Alt 16-07-2017   #10
  • Offline
  • Yarbay
  • Genel Bilgiler
Üyelik tarihi
Feb 2012
Mesajlar
Konular


  


Alıntı:
ZeussHack´isimli üyeden Alıntı Mesajı göster
Kerdeş azcık türkçe konuşsana implemente ne, mix columns ne, interpreter yapımı ne
Mix columns, aes algoritmasının içerisinde bulunan bir işlem.

Implement, implementasyon bunlar yazılım ile ilgilenen kişilere anlam ifade eden teknik bir tabir. Anlamı bir şeyi yazılım dili ile hayata geçirme işlemi (bkz implementasyon : 1. yaşama geçirme. 2. yerine getirme. 3. uygulama).

Interpreter, gene yazılım ile ilgilenen kişilerin ne olduğunu bildiği Türkçe'si "yorumlayıcı" olan, interpreted dilleri çalıştıran bir yazılım.
    


__________________

Computer Engineer.

Software Development Specialist.
Offline
 
Alıntı ile Cevapla
Cevapla

Bookmarks

Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks Kapalı
Pingbacks Kapalı
Refbacks Kapalı


Bilgilendirme Turkhackteam.net/org
Sitemizde yer alan konular üyelerimiz tarafından açılmaktadır.
Bu konular yönetimimiz tarafından takip edilsede gözden kaçabilen telif hakkı olan veya mahkeme kararı çıkmış konular sitemizde bulunabilir. Bu tür konuları bize turkhackteamiletisim [at] gmail.com adresine mail atarak bildirdiğiniz takdirde en kısa sürede konular hakkında gerekli işlemler yapılacaktır.
Please Report Abuse, DMCA, Harassment, Scamming, Warez, Crack, Divx, Mp3 or any Illegal Activity to turkhackteamiletisim [at] gmail.com


Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz, bu sitelerin güvenlik açıklarını site sahibine bildirmek için çaba sarfeder.
Turkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Turkhackteam sorumlu değildir. Sitelerinize Turkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.




Powered by vBulletin® Copyright ©2000 - 2017

TSK Mehmetçik Vakfı

Türk Polis Teşkilatını Güçlendirme Vakfı



Google Links

wau

Search Engine Friendly URLs by vBSEO 3.6.0 ©2011, Crawlability, Inc.