Rumus ini saya dapatkan dari buku struktur data pada algoritma bubble sort.
Saya tahu kita (n-1) * (n kali), tapi mengapa dibagi 2?
Adakah yang bisa menjelaskan hal ini kepada saya atau memberikan bukti rincinya.
Terima kasih
Rumus ini saya dapatkan dari buku struktur data pada algoritma bubble sort.
Saya tahu kita (n-1) * (n kali), tapi mengapa dibagi 2?
Adakah yang bisa menjelaskan hal ini kepada saya atau memberikan bukti rincinya.
Terima kasih
Lihat bilangan segitiga.
(N-1) + (N-2) +...+ 2 + 1
adalah jumlah dari N-1 item. Sekarang susun ulang item-itemnya sehingga setelah item pertama muncul item terakhir, lalu item kedua, lalu item kedua hingga terakhir, yaitu (N-1) + 1 + (N-2) + 2 +..
. Cara mengurutkan item sekarang Anda dapat melihat bahwa masing-masing pasangan tersebut sama dengan N (N-1+1 adalah N, N-2+2 adalah N). Karena ada N-1 item, maka ada (N-1)/2 pasangan tersebut. Jadi Anda menambahkan N (N-1)/2 kali, sehingga nilai totalnya adalah N*(N-1)/2
.
Mulailah dengan segitiga...
*
**
***
****
mewakili 1+2+3+4 sejauh ini. Potong segitiga menjadi dua sepanjang satu dimensi...
*
**
* **
** **
Putar bagian yang lebih kecil 180 derajat, dan tempelkan di atas bagian yang lebih besar...
**
*
*
**
**
**
Tutup celahnya untuk mendapatkan persegi panjang.
Pada pandangan pertama ini hanya berfungsi jika alas persegi panjang memiliki panjang genap - tetapi jika panjangnya ganjil, Anda cukup memotong kolom tengah menjadi dua - ini masih berfungsi dengan lebar setengah unit dua kali lebih tinggi ( masih bilangan bulat area) strip di satu sisi persegi panjang Anda.
Apapun alas segitiganya, lebar persegi panjang Anda adalah (base / 2)
dan tingginya (base + 1)
, sehingga menghasilkan ((base + 1) * base) / 2
.
Namun, base
saya adalah n-1
Anda, karena pengurutan gelembung membandingkan sepasang item pada satu waktu, dan oleh karena itu hanya mengulangi posisi (n-1) untuk loop pertama.
Cobalah untuk membuat pasangan angka dari himpunan tersebut. Yang pertama + yang terakhir; yang kedua + yang sebelumnya terakhir. Artinya n-1 + 1; n-2 + 2. Hasilnya selalu n. Dan karena Anda menjumlahkan dua bilangan, hanya ada (n-1)/2 pasangan yang dapat dibuat dari (n-1) bilangan.
Jadi seperti (N-1)/2*N.
Saya tahu kita (n-1) * (n kali), tapi mengapa dibagi 2?
Hanya (n - 1) * n
jika Anda menggunakan bubblesort yang naif. Anda bisa mendapatkan penghematan yang signifikan jika memperhatikan hal berikut:
Setelah setiap perbandingan dan pertukaran, elemen terbesar yang Anda temui akan berada di tempat terakhir Anda berada.
Setelah lintasan pertama, elemen terbesar akan berada di posisi terakhir; setelah lintasan ke-kth, elemen terbesar ke-kth akan berada di posisi terakhir ke-k.
Jadi Anda tidak perlu mengurutkan semuanya setiap saat: Anda hanya perlu mengurutkan n - 2 elemen untuk kedua kalinya, n - 3 elemen untuk ketiga kalinya, dan seterusnya. Artinya jumlah perbandingan/swap yang harus Anda lakukan adalah (n - 1) + (n - 2) + ...
. Ini adalah deret aritmatika, dan persamaan jumlah totalnya kali adalah (n - 1)*n / 2.
Contoh: jika ukuran daftarnya adalah N = 5, maka Anda melakukan pertukaran 4 + 3 + 2 + 1 = 10 -- dan perhatikan bahwa 10 sama dengan 4 * 5/2.
n^2 + 1,000,000
juga O(n^2)
tetapi jelas tidak sama dengan n^2
.
- person John Feminella; 15.03.2015
Jumlah perkembangan aritmatika
(A1+AN)/2*N = (1 + (N-1))/2*(N-1) = N*(N-1)/2
Ini adalah bukti yang cukup umum. Salah satu cara untuk membuktikannya adalah dengan menggunakan induksi matematika. Berikut tautannya: http://zimmer.csufresno.edu/~larryc/proofs/proofs.mathinduction.html
Asumsikan n=2. Maka kita memiliki 2-1 = 1 di sisi kiri dan 2*1/2 = 1 di sisi kanan.
Dinyatakan f(n) = (n-1)+(n-2)+(n-3)+...+1
Sekarang asumsikan kita telah menguji hingga n=k. Kemudian kita harus menguji n=k+1.
di sisi kiri kita memiliki k+(k-1)+(k-2)+...+1, jadi f(k)+k
Di sisi kanan kita memiliki (k+1)*k/2 = (k^2+k)/2 = (k^2 +2k - k)/2 = k+(k-1)k/ 2 = kf(k)
Jadi ini harus berlaku untuk setiap k, dan ini menyimpulkan pembuktiannya.
Berikut pembuktian dengan induksi, dengan mempertimbangkan suku N
, tetapi untuk suku N - 1
sama saja:
Untuk N = 0
rumusnya jelas benar.
Misalkan 1 + 2 + 3 + ... + N = N(N + 1) / 2
benar untuk beberapa N
alami.
Kami akan membuktikan 1 + 2 + 3 + ... + N + (N + 1) = (N + 1)(N + 2) / 2
juga benar dengan menggunakan asumsi kami sebelumnya:
1 + 2 + 3 + ... + N + (N + 1) = (N(N + 1) / 2) + (N + 1)
= (N + 1)((N / 2) + 1)
= (N + 1)(N + 2) / 2
.
Jadi rumusnya berlaku untuk semua N
.
N
ditambahkan di sebelah kiri. Jika tidak, berartiN
hilang, jadi2N
harus dikurangi pada pembilangnya. - person Johannes Schaub - litb   schedule 20.03.2010n
. - person Ken   schedule 20.03.2010N
itu sendiri tidak disertakan (biasanya demikian, dengan pernyataan masalah ini). Doh! - person Stephan202   schedule 20.03.2010