Competitive Programming için neden C++?

  • Konuyu başlatan RufatM
  • Başlangıç Tarihi
  • Mesaj 10
  • Görüntüleme 317

RufatM

Hectopat
Katılım
13 Aralık 2019
Mesajlar
4.363
Çözümler
15
Şimdi bugün size niye Python değil de C++ tercih etmenizi açıklayacağım daha önce kısaca bunu açıklamıştım ama tam olarak açıklamak istiyorum. İlk önce simple bir problem çözüyoruz diyelim. https://cses.fi/problemset/task/1068/ temel bir problem değil mi?
Python kodu:

Python:
n = int(input())

print(n, end=" ")

while n != 1:
    if n % 2 == 0:
        n = n // 2
    else:
        n = (n * 3) + 1

    print(n, end=" ")
C++ kodu:
C++:
#include <bits/stdc++.h>
using namespace std;

int main() {
    long long n;
    cin >> n;
    while (n != 1) {
        cout << n << " ";
        if (n % 2 == 0) {
            n /= 2;
        } else {
            n = 3 * n + 1;
        }
    }
    cout << 1;
}

Şimdi bu iki kodun çalışma sürelerine bir bakalım: Python Kodu: 280ms C++ Kodu: (CSES'de saniye olarak gözüküyor kod o kadar hızlı ki 0.00 saniye olarak gözüktü yani 100 Ms'den daha düşük). Gördüğünüz gibi daha uzun bir kod olmasına rağmen C++ kodu daha hızlı çalıştı ve bu çok sade bir kod olmasına rağmen 280 ms ile çalışması ortalama bir icpc, ioi sorusunda kesin olarak time limit yiyeceğinizi gösteriyor.

Onun dışında algoritma genel olarak C ailesi diller ile öğrenilir ve competitive programming için algoritma bilgisi çok çok çok önemlidir. Onun dışında ioi, icpc gibi hedefleriniz varsa genel olarak her yıl sadece C++ dili kullanılıyor. Onun dışında daha önceki konuda attığım PDF'ler sadece C++ dilini içeriyor ve bu da C++ ile competitive programming öğrenmenin daha kolay olduğunu gösteriyor.

Şimdi bugün size niye Python değil de C++ tercih etmenizi açıklayacağım daha önce kısaca bunu açıklamıştım ama tam olarak açıklamak istiyorum. İlk önce simple bir problem çözüyoruz diyelim. https://cses.fi/problemset/task/1068/ temel bir problem değil mi?
Python kodu:

Python:
n = int(input())

print(n, end=" ")

while n != 1:
    if n % 2 == 0:
        n = n // 2
    else:
        n = (n * 3) + 1

    print(n, end=" ")
C++ kodu:
C++:
#include <bits/stdc++.h>
using namespace std;

int main() {
    long long n;
    cin >> n;
    while (n != 1) {
        cout << n << " ";
        if (n % 2 == 0) {
            n /= 2;
        } else {
            n = 3 * n + 1;
        }
    }
    cout << 1;
}

Şimdi bu iki kodun çalışma sürelerine bir bakalım: Python Kodu: 280ms C++ Kodu: (CSES'de saniye olarak gözüküyor kod o kadar hızlı ki 0.00 saniye olarak gözüktü yani 100 Ms'den daha düşük). Gördüğünüz gibi daha uzun bir kod olmasına rağmen C++ kodu daha hızlı çalıştı ve bu çok sade bir kod olmasına rağmen 280 ms ile çalışması ortalama bir icpc, ioi sorusunda kesin olarak time limit yiyeceğinizi gösteriyor.

Onun dışında algoritma genel olarak C ailesi diller ile öğrenilir ve competitive programming için algoritma bilgisi çok çok çok önemlidir. Onun dışında ioi, icpc gibi hedefleriniz varsa genel olarak her yıl sadece C++ dili kullanılıyor. Onun dışında daha önceki konuda attığım PDF'ler sadece C++ dilini içeriyor ve bu da C++ ile competitive programming öğrenmenin daha kolay olduğunu gösteriyor.
Konuya rust ile alakalı da birşey eklemek istiyorum rust dilinin c++ dilinin yerine geçeceğini söyleyenler var ancak bu competitive programming için pek mümkün değil çünki rust c++ kadar hızlı ve algoritmik olarak iyi bir dil değil en azından önümüzdeki 10-15 yıl içerisinde bunun pek mümkün olacağını sanmıyorum.

Şimdi bugün size niye Python değil de C++ tercih etmenizi açıklayacağım daha önce kısaca bunu açıklamıştım ama tam olarak açıklamak istiyorum. İlk önce simple bir problem çözüyoruz diyelim. https://cses.fi/problemset/task/1068/ temel bir problem değil mi?
Python kodu:

Python:
n = int(input())

print(n, end=" ")

while n != 1:
    if n % 2 == 0:
        n = n // 2
    else:
        n = (n * 3) + 1

    print(n, end=" ")
C++ kodu:
C++:
#include <bits/stdc++.h>
using namespace std;

int main() {
    long long n;
    cin >> n;
    while (n != 1) {
        cout << n << " ";
        if (n % 2 == 0) {
            n /= 2;
        } else {
            n = 3 * n + 1;
        }
    }
    cout << 1;
}

Şimdi bu iki kodun çalışma sürelerine bir bakalım: Python Kodu: 280ms C++ Kodu: (CSES'de saniye olarak gözüküyor kod o kadar hızlı ki 0.00 saniye olarak gözüktü yani 100 Ms'den daha düşük). Gördüğünüz gibi daha uzun bir kod olmasına rağmen C++ kodu daha hızlı çalıştı ve bu çok sade bir kod olmasına rağmen 280 ms ile çalışması ortalama bir icpc, ioi sorusunda kesin olarak time limit yiyeceğinizi gösteriyor.

Onun dışında algoritma genel olarak C ailesi diller ile öğrenilir ve competitive programming için algoritma bilgisi çok çok çok önemlidir. Onun dışında ioi, icpc gibi hedefleriniz varsa genel olarak her yıl sadece C++ dili kullanılıyor. Onun dışında daha önceki konuda attığım PDF'ler sadece C++ dilini içeriyor ve bu da C++ ile competitive programming öğrenmenin daha kolay olduğunu gösteriyor.


Konuya rust ile alakalı da birşey eklemek istiyorum rust dilinin c++ dilinin yerine geçeceğini söyleyenler var ancak bu competitive programming için pek mümkün değil çünki rust c++ kadar hızlı ve algoritmik olarak iyi bir dil değil en azından önümüzdeki 10-15 yıl içerisinde bunun pek mümkün olacağını sanmıyorum.
Hem de bu soruları çözebilmeniz size iş görüşmelerinde de çok işe yarayacaktır.
 
Son düzenleme:
Ayetten programlama dillerinin grafiğine baktığım zaman bazı dillerin diğer dillerden türediğini görmüştüm, yanlış hatırlamıyorsam Python temelde Java'yı baz alıyordu ve kodlar altyapıda Java'ya çevriliyordu, bu da kodun performansında önemli bir detay bence, siz ne düşünüyorsunuz?
 
Ayetten programlama dillerinin grafiğine baktığım zaman bazı dillerin diğer dillerden türediğini görmüştüm, yanlış hatırlamıyorsam Python temelde Java'yı baz alıyordu ve kodlar altyapıda Java'ya çevriliyordu, bu da kodun performansında önemli bir detay bence, siz ne düşünüyorsunuz?
Evet mesela Python ve C++ dilleri ikisi de C dili kullanılarak yapıldı. Bu üçü arasından da bu yüzden genel olarak en hızlı çalışan C dilidir. Ama neden c++ python'dan daha hızlı diye sorarsanız kodun çalışma prinsipi Hardware-ML-AL seklinde gidiyor yani Hardware'e ne kadar yakınsa çok büyük ihtimal o dil daha hızlı bir dil olacaktır. Umarım anlatabilmişimdir.
 
Evet mesela Python ve C++ dilleri ikisi de C dili kullanılarak yapıldı. Bu üçü arasından da bu yüzden genel olarak en hızlı çalışan C dilidir. Ama neden C++ Python'dan daha hızlı diye sorarsanız kodun çalışma prinsipi hardware-ML-al seklinde gidiyor yani Hardware'e ne kadar yakınsa çok büyük ihtimal o dil daha hızlı bir dil olacaktır. Umarım anlatabilmilmişimdir.

Evet gayet güzel anlattınız, güzel bir konu olmuş 👏
 
rust c++ kadar hızlı ve algoritmik olarak iyi bir dil
Aynı problem için;
1709748699543.png
 
Konuya rust ile alakalı da birşey eklemek istiyorum rust dilinin c++ dilinin yerine geçeceğini söyleyenler var
Ek olarak Rust'ın devralmaya çalıştığı taht C++ değil. C. Hoş, beraberinde C++'a da rakip olabilecek featureları var ama dilin kendisinin ne çıkış amacı competitive programming, ne oop. Oop becerisini bile sonradan hadi eklememiş olmayalım diye eklediler. Dil hızlı ve güvenli.
 
Ek olarak Rust'ın devralmaya çalıştığı taht C++ değil. C. Hoş, beraberinde C++'a da rakip olabilecek featureları var ama dilin kendisinin ne çıkış amacı competitive programming, ne oop. Oop becerisini bile sonradan hadi eklememiş olmayalım diye eklediler. Dil hızlı ve güvenli.
Forumda rust mı c++ diye çok fazla konu olduğu için ve konu da c++ ile alakalı olduğu için bunu yazmak istedim hocam umarım anlamışsındır. Ki zaten konu da cp olduğu için bunu yazdım.
 
Daha sıkıntılı sorularda aynı değil ama hocam onu da kabul etmek gerekli tabii sizde haklısınız sadece bir problem ile örnek vermek yanlış ama adı üstünde örnek.
O(n^n) algoritmaları dene hangisi daha hızlı çalışacak diye. Aşağı yukarı aynı hızda çalışacaklar. Bazen C++*, bazen Rust daha hızlı çalışacak aynı oranda optimize kodlarda ama genelde aynılar. Çünkü compile sonrası tamamen sisteme bırakılmış durumda.

*: C++'ta polymorphism eklediğin zaman genelde C++ daha yavaş çalışır. Özellikle object-hierarchy çok derinse.
 
O(n^n) algoritmaları dene hangisi daha hızlı çalışacak diye. Aşağı yukarı aynı hızda çalışacaklar. Bazen C++*, bazen Rust daha hızlı çalışacak aynı oranda optimize kodlarda ama genelde aynılar. Çünkü compile sonrası tamamen sisteme bırakılmış durumda.

*: C++'ta polymorphism eklediğin zaman genelde C++ daha yavaş çalışır. Özellikle object-hierarchy çok derinse.
Bir tık daha açmam gerekiyordu demek ki 😃
 

Yeni konular

Geri
Yukarı