Moving-average-array-java

Moving-average-array-java

Trading-system-vt
Trading-strategy-with-rsi
Mr-green-forex-trading


Teknik-forex-sebenar-free-pdf-download Kemenangan-forex-hyderabad Stock-options-jackpot-tip Indikator standar-standar perdagangan Stockpair-binary-options-trading Put-in-trade-options

2.4 Antrian Prioritas Banyak aplikasi mengharuskan kami memproses item yang memiliki kunci secara berurutan, namun tidak harus dalam urutan penuh dan tidak harus sekaligus sekaligus. Seringkali, kita mengumpulkan satu set item, lalu mengolah yang satu dengan kunci terbesar, lalu mungkin mengumpulkan lebih banyak barang, lalu mengolah yang satu dengan kunci terbesar saat ini, dan sebagainya. Tipe data yang tepat di lingkungan seperti itu mendukung dua operasi: keluarkan maksimum dan sisipkan. Tipe data semacam itu disebut priority queue. Antrian prioritas dicirikan dengan menghapus operasi maksimum dan penyisipan. Dengan konvensi, kita akan membandingkan kunci hanya dengan metode yang kurang (), seperti yang telah kita lakukan untuk menyortir. Jadi, jika catatan bisa memiliki kunci duplikat, maksimal berarti ada catatan dengan nilai kunci terbesar. Untuk melengkapi API, kita juga perlu menambahkan konstruktor dan tes jika operasi kosong. Untuk fleksibilitas, kami menggunakan implementasi generik dengan tipe generik Key yang mengimplementasikan Comparable. Program TopM.java adalah client antrian prioritas yang mengambil argumen command-line M. Membaca transaksi dari input standar, dan mencetak transaksi M terbesar. Implementasi dasar. Struktur data dasar yang kami bahas di Bagian 1.3 memberi kami empat titik awal untuk menerapkan antrian prioritas. Array representasi (unordered). Mungkin implementasi antrian prioritas paling sederhana didasarkan pada kode kita untuk tumpukan pushdown. Kode untuk memasukkan dalam antrian prioritas sama dengan push di stack. Untuk menerapkan menghapus maksimal. Kita dapat menambahkan kode seperti lingkaran dalam dari jenis pilihan untuk menukar item maksimum dengan item di bagian akhir dan kemudian menghapus yang itu, seperti yang kita lakukan dengan pop () untuk tumpukan. Program UnorderedArrayMaxPQ.java menerapkan antrian prioritas dengan menggunakan pendekatan ini. Array representasi (dipesan). Pendekatan lain adalah dengan menambahkan kode untuk insert untuk memindahkan entri yang lebih besar satu posisi ke kanan, sehingga menyimpan entri dalam array secara berurutan (seperti pada sort penyisipan). Dengan demikian item terbesar selalu di akhir, dan kode untuk menghapus maksimal dalam antrian prioritas sama dengan pop di stack. Program OrderedArrayMaxPQ.java menerapkan antrian prioritas menggunakan pendekatan ini. Linked-list representations (unordered dan reverse-ordered). Demikian pula, kita dapat memulai dengan kode daftar tertaut untuk tumpukan pushdown, baik memodifikasi kode pop () untuk menemukan dan mengembalikan maksimum atau kode untuk push () untuk menyimpan item dalam urutan terbalik dan kode pop () ke Batalkan tautan dan kembalikan item (maksimum) pertama pada daftar. Semua implementasi elementer yang baru saja dibahas memiliki properti baik insert atau remove operasi maksimum mengambil waktu linier dalam kasus terburuk. Menemukan sebuah implementasi di mana kedua operasi dijamin cepat adalah tugas yang lebih menarik, dan ini adalah subjek utama dari bagian ini. Heap definisi. Tumpukan biner adalah struktur data yang secara efisien dapat mendukung operasi antrian prioritas dasar. Dalam tumpukan biner, item disimpan dalam array sehingga setiap tombol dijamin lebih besar dari (atau sama dengan) tombol pada dua posisi spesifik lainnya. Pada gilirannya, masing-masing kunci itu harus lebih besar dari dua kunci lagi, dan sebagainya. Pemesanan ini mudah untuk melihat apakah kita melihat tombol sebagai berada dalam struktur pohon biner dengan tepi dari setiap tombol ke dua kunci yang diketahui lebih kecil. Definisi. Sebuah pohon biner ditumpuk-tumpukan jika kunci di setiap simpul lebih besar dari (atau sama dengan) kunci di simpul dua anak itu (jika ada). Dalil. Kunci terbesar dalam tumpukan pohon biner yang ditumpuk ditemukan di root. Kita bisa memaksakan pembatasan pemesanan tumpukan pada pohon biner manapun. Akan sangat nyaman jika menggunakan pohon biner lengkap seperti di bawah ini. Kami mewakili pohon biner lengkap secara berurutan dalam sebuah array dengan meletakkan node dengan tingkat ketertiban. Dengan akar pada posisi 1, anak-anaknya di posisi 2 dan 3, anak-anak mereka di posisi 4, 5, 6 dan 7, dan seterusnya. Definisi. Tumpukan biner adalah sekumpulan simpul dengan kunci yang disusun dalam susunan biner biner lengkap, yang terwakili dalam urutan tingkat dalam sebuah array (tidak menggunakan entri pertama). Dalam tumpukan, induk dari node pada posisi k berada pada posisi k2 dan, sebaliknya, kedua anak simpul pada posisi k berada pada posisi 2k dan 2k 1. Kita dapat melakukan perjalanan naik turun dengan melakukan aritmatika sederhana pada indeks array. : Untuk naik pohon dari ak kita set k ke k2 untuk turun pohon kita set k ke 2k atau 2k1. Algoritma pada tumpukan. Kami mewakili tumpukan ukuran N dalam array pribadi dengan panjang pq N1, dengan pq0 tidak terpakai dan tumpukan di pq1 sampai pqN. Kami mengakses kunci hanya melalui fungsi pembantu pribadi kurang () dan exch (). Operasi timbunan yang kami anggap bekerja dengan terlebih dahulu membuat modifikasi sederhana yang bisa melanggar kondisi heap, kemudian berjalan melalui heap, memodifikasi timbunan seperti yang dipersyaratkan untuk memastikan bahwa kondisi heap terpenuhi dimana-mana. Kami mengacu pada proses ini sebagai reheapifikasi. Atau mengembalikan heap order. Rebung kembali ke bawah (berenang). Jika urutan tumpukan dilanggar karena kunci nodus menjadi lebih besar dari pada kunci induk orang tua, maka kita dapat membuat kemajuan dalam memperbaiki pelanggaran dengan menukar simpul dengan orang tuanya. Setelah pertukaran, simpul lebih besar dari kedua anaknya (satu adalah induk tua, dan yang lainnya lebih kecil dari orang tua karena anak adalah anak dari simpul itu) namun simpulnya masih lebih besar dari induknya. Kita bisa memperbaiki pelanggaran itu dengan cara yang sama, dan seterusnya, menaikkan tumpukan sampai kita mencapai simpul dengan kunci lebih besar, atau akarnya. Top-down heapify (wastafel). Jika urutan tumpukan dilanggar karena kunci nodus menjadi lebih kecil dari satu atau kedua kunci anak-anak node itu, maka kita dapat membuat kemajuan dalam memperbaiki pelanggaran dengan menukar simpul dengan anak kedua yang lebih besar. Peralihan ini dapat menyebabkan pelanggaran pada anak kami memperbaiki pelanggaran tersebut dengan cara yang sama, dan seterusnya, bergerak menuruni tumpukan sampai kami mencapai simpul dengan kedua anak lebih kecil, atau bagian bawahnya. Heap berbasis priority queue. Operasi wastafel () dan berenang () ini memberikan dasar untuk penerapan API antrian prioritas secara efisien, seperti yang ditunjukkan di bawah dan diimplementasikan di MaxPQ.java dan MinPQ.java. Memasukkan. Kami menambahkan item baru di akhir array, menambah ukuran timbunan, lalu berenang naik melalui tumpukan dengan item itu untuk mengembalikan kondisi tumpukan. Hapus maksimal. Kami mengambil barang terbesar dari atas, meletakkan barang dari ujung tumpukan di bagian atas, mengurangi ukuran tumpukan, dan kemudian menenggelamkan melalui tumpukan dengan barang itu untuk mengembalikan kondisi tumpukan. Dalil. Dalam antrian prioritas item N, algoritma tumpukan tidak memerlukan lebih dari 1 lg N untuk menyisipkan dan tidak lebih dari 2 lg N untuk menghapus maksimum. Pertimbangan praktis. Kami menyimpulkan penelitian kami tentang antrian prioritas API dengan beberapa pertimbangan praktis. Tumpukan multiway Tidaklah sulit untuk memodifikasi kode kita untuk membangun tumpukan berdasarkan representasi array dari pohon terner atau rerata heap-ordered. Ada tradeoff antara biaya yang lebih rendah dari penurunan ketinggian pohon dan biaya yang lebih tinggi untuk menemukan anak-anak tiga atau d terbesar di setiap simpul. Array mengubah ukuran Kita bisa menambahkan konstruktor tanpa argumen, kode untuk penggandaan array di insert (). Dan kode untuk membuat potongan separuh dalam delMax (). Seperti yang kita lakukan untuk tumpukan di Bagian 1.3. Batas waktu logaritmik diamortisasi bila ukuran antrian prioritas sewenang-wenang dan susunannya diubah ukurannya. Ketidakmampuan tombol. Antrian prioritas berisi objek yang dibuat oleh klien namun mengasumsikan bahwa kode klien tidak mengubah kunci (yang mungkin membuat inversi tumpukan). Indeks prioritas antrian Dalam banyak aplikasi, masuk akal jika mengizinkan klien merujuk ke item yang sudah ada dalam antrian prioritas. Salah satu cara mudah untuk melakukannya adalah mengaitkan indeks bilangan bulat unik dengan setiap item. IndexMinPQ.java adalah implementasi berbasis tumpukan API IndexMaxPQ.java ini serupa namun untuk antrian prioritas dengan orientasi maksimal. Multiway.java adalah klien yang menggabungkan beberapa input input menjadi satu output stream yang diurutkan. Kita bisa menggunakan antrian prioritas untuk mengembangkan metode sorting. Kami memasukkan semua kunci yang akan diurutkan ke dalam antrian prioritas berorientasi minimum, kemudian berulang kali menggunakan menghapus minimum untuk menghapus semuanya secara berurutan. Saat menggunakan timbunan untuk antrian prioritas, kita mendapatkan heapsort. Berfokus pada tugas menyortir, kita meninggalkan gagasan untuk menyembunyikan representasi tumpukan antrian prioritas dan menggunakan swim () dan sink () secara langsung. Dengan melakukan hal tersebut, kita bisa mengurutkan sebuah array tanpa memerlukan ruang ekstra, dengan mempertahankan tumpukan dalam susunan yang akan diurutkan. Heapsort terbagi menjadi dua tahap: konstruksi tumpukan. Dimana kita mengatur ulang susunan aslinya menjadi tumpukan, dan pengaturannya. Di mana kita menarik barang keluar dari tumpukan dalam penurunan untuk membangun hasil yang diurutkan. Konstruksi tumpukan Kita bisa menyelesaikan tugas ini dalam waktu sebanding dengan N lg N, dengan melanjutkan dari kiri ke kanan melalui array, menggunakan swim () untuk memastikan bahwa entri di sebelah kiri penunjuk pemindai membentuk pohon lengkap yang disusun dengan tumpukan, seperti berturut-turut Sisipan antrian prioritas Metode cerdas yang jauh lebih efisien adalah melanjutkan dari kanan ke kiri, menggunakan wastafel () untuk membuat keropos saat kita pergi. Setiap posisi dalam array adalah akar dari wastafel subheap kecil () bekerja atau semacam itu, juga. Jika dua anak dari sebuah simpul bertumpuk, maka memanggil wastafel () pada simpul tersebut membuat subtree berakar di sana sebuah tumpukan. Sortdown. Sebagian besar pekerjaan selama heapsort dilakukan selama fase kedua, di mana kita menghapus barang-barang tersisa terbesar dari tumpukan dan memasukkannya ke dalam posisi array dikosongkan saat timbunan menyusut. Heap.java adalah implementasi penuh heapsort. Berikut adalah jejak isi array setelah masing-masing wastafel. Dalil. Konstruksi timbunan wastafel adalah waktu linier. Dalil. Heapsort users kurang dari 2n lg n bandingkan dan tukar untuk mengurutkan n item. Sebagian besar barang dimasukkan kembali ke tumpukan saat pengekangan pergi sampai ke bawah. Dengan demikian kita dapat menghemat waktu dengan menghindari pemeriksaan apakah item tersebut telah mencapai posisinya, hanya dengan mempromosikan yang lebih besar dari kedua anak tersebut sampai batas bawah tercapai, kemudian mengembalikan tumpukan ke posisi yang tepat. Ide ini mengurangi jumlah perbandingan dengan faktor 2 dengan mengorbankan pembukuan tambahan. Misalkan urutan (di mana huruf berarti insert dan tanda asterisk menghapus maksimum) diterapkan pada antrian prioritas yang awalnya kosong. Berikan urutan nilai yang dikembalikan dengan menghapus operasi maksimum. Larutan. R O O O)))))))))))))))))))))))))))))))...................... Larutan. Perlu mengupdate nilai maksimal dari awal setelah operasi remove-the-maximum. Berikan prioritas implementasi antrian yang mendukung insert dan remove secara maksimal. Satu untuk masing-masing struktur data dasar berikut: array tak berurutan, susunan pesanan, daftar tertaut yang tidak berurutan, dan daftar tertaut yang dipesan. Berikan tabel batas terburuk untuk setiap operasi untuk masing-masing dari keempat implementasi Anda dari latihan sebelumnya. Solusi parsial OrderedArrayMaxPQ.java dan UnorderedArrayMaxPQ.java Merupakan array yang diurutkan dalam urutan menurun sebagai timbunan berorientasi maks. Menjawab. Iya nih. Misalkan aplikasi Anda akan memiliki sejumlah besar operasi insert, namun hanya sedikit yang menghapus operasi maksimum. Implementasi antrean prioritas mana yang menurut Anda paling efektif: tumpukan, array tidak berurutan, deretan perintah Jawaban. Array tak berurutan Insert adalah waktu konstan. Misalkan aplikasi Anda akan memiliki sejumlah besar pencarian operasi maksimum, namun sejumlah kecil memasukkan dan menghapus operasi maksimum. Implementasi antrian prioritas yang menurut Anda paling efektif: tumpukan, array tidak berurutan, deretan perintah Jawaban. Array yang dipesan Temukan yang maksimal adalah waktu konstan. Berapakah jumlah minimum barang yang harus dipertukarkan saat mengeluarkan operasi maksimum dalam tumpukan ukuran N tanpa tombol duplikat Beri tumpukan ukuran 15 yang minimumnya tercapai. Jawab pertanyaan yang sama untuk dua dan tiga kali berturut-turut menghapus operasi maksimum. Jawaban parsial (A) 2. Rancang algoritma sertifikasi linier untuk memeriksa apakah sebuah array pq adalah timah min-oriented. Larutan. Lihat metode isMinHeap () di MinPQ.java. Buktikan bahwa konstruksi tumpukan berbasis wastafel menggunakan paling banyak 2 n membandingkan dan paling banyak pertukaran n. Larutan. Sudah cukup untuk membuktikan bahwa konstruksi tumpukan berbasis wastafel menggunakan lebih sedikit daripada n pertukaran karena jumlah perbandingan paling banyak dua kali jumlah pertukaran. Untuk kesederhanaan, asumsikan bahwa tumpukan biner itu sempurna (yaitu pohon biner di mana setiap tingkat selesai diisi) dan memiliki tinggi h. Kami mendefinisikan tinggi simpul di pohon menjadi puncak subtree yang berakar pada simpul itu. Kunci pada ketinggian k dapat ditukar dengan paling banyak k kuncinya di bawahnya saat tenggelam. Karena ada 2 h minus k node pada ketinggian k. Jumlah total pertukaran paling banyak: Kesetaraan pertama adalah untuk jumlah yang tidak standar, namun sangat mudah untuk memverifikasi bahwa formula tersebut bertahan melalui induksi matematis. Persamaan kedua berlaku karena pohon biner yang sempurna dengan tinggi h memiliki 2 h 1 minus 1 node. Membuktikan bahwa hasilnya berlaku saat pohon biner tidak sempurna membutuhkan perawatan yang sedikit lebih. Anda dapat melakukannya dengan menggunakan fakta bahwa jumlah nodus pada tinggi k pada tumpukan biner pada n node paling banyak terjadi (n 2 k 1). Solusi alternatif Sekali lagi, untuk kesederhanaan, asumsikan bahwa tumpukan biner itu sempurna (yaitu pohon biner di mana setiap tingkat selesai diisi). Kami mendefinisikan tinggi simpul di pohon menjadi puncak subtree yang berakar pada simpul itu. Pertama, amati bahwa tumpukan biner pada n node memiliki n minus 1 link (karena setiap link adalah induk dari satu node dan setiap node memiliki parent link kecuali root). Menenggelamkan simpul dengan tinggi k membutuhkan paling banyak pertukaran k. Kami akan menagih k link ke setiap node pada ketinggian k. Tapi belum tentu link di jalan yang ditempuh saat menenggelamkan simpul. Sebagai gantinya, kita mengisi node k link di sepanjang jalan dari simpul yang menuju ke kiri kanan-kanan-kanan-. Sebagai contoh, pada diagram di bawah, root node diisi dengan 4 link merah node biru tersebut diisi dengan 3 link biru dan sebagainya. Perhatikan bahwa tidak ada link yang dibebankan ke lebih dari satu node. (Sebenarnya, ada dua tautan yang tidak dibebankan ke simpul manapun: tautan yang benar dari akar dan tautan induk dari simpul paling bawah paling kanan). Jadi, jumlah total pertukaran paling banyak n. Karena paling banyak 2 membandingkan per pertukaran, jumlah perbandingan paling banyak 2 n. Masalah Kreatif Teori bilangan komputasional. Tulis sebuah program CubeSum.java yang mencetak semua bilangan bulat dari bentuk 3 b 3 dimana a dan b adalah bilangan bulat antara 0 dan N dalam urutan yang diurutkan, tanpa menggunakan ruang yang berlebihan. Artinya, alih-alih menghitung array dari jumlah N 2 dan menyortirnya, buatlah antrian prioritas berorientasi minimum, yang pada awalnya mengandung (0 3. 0, 0), (1 3. 1, 0), (2 3. 2 , 0). (N 3. N, 0). Kemudian, sementara antrian prioritas tidak kosong, hapus item terkecil (i 3 j 3. i, j), cetaklah, dan kemudian, jika j 3 (j1) 3. i, j1). Gunakan program ini untuk menemukan semua bilangan bulat yang berbeda a, b, c, dan d antara 0 dan 106 sedemikian rupa sehingga a 3 b 3 c 3 d 3. mis. 1729 93 103 13 123. Temukan minimum. Tambahkan metode min () ke MaxPQ.java. Implementasi Anda harus menggunakan waktu konstan dan ruang ekstra konstan. Solusi. Tambahkan variabel contoh tambahan yang menunjuk ke item minimum. Perbarui setelah setiap panggilan masuk (). Reset ke null jika antrian prioritas menjadi kosong. Pencarian rata-rata. Rancang tipe data yang mendukung sisipan dalam waktu logaritmik, cari median dalam waktu konstan, dan lepaskan median dalam waktu logaritmik. Solusi. Jaga kunci median di v gunakan tumpukan kunci yang berorientasi maksimal untuk kunci kurang dari tombol v gunakan tumpukan berorientasi min untuk tombol yang lebih besar dari tombol v. Untuk memasukkan, tambahkan kunci baru ke tumpukan yang sesuai, ganti v dengan Kunci yang diambil dari tumpukan itu Batas bawah. Buktikan bahwa tidak mungkin untuk mengembangkan implementasi API MinPQ sehingga keduanya memasukkan dan menghapus jaminan minimum untuk menggunakan N log log N compare. Larutan. Ini akan menghasilkan algoritma penyortiran N log-based N log (masukkan item N, kemudian berulang kali menghapus minimum), yang melanggar proposisi Section 2.3. Prioritas indeks antrian implementasi. Terapkan IndexMaxPQ.java dengan memodifikasi MaxPQ.java sebagai berikut: Ubah pq untuk menyimpan indeks, tambahkan tombol array untuk menahan nilai kunci, dan tambahkan qp array yang merupakan kebalikan dari pq mdash qpi memberi posisi i pada pq ( Indeks j sehingga pqj adalah i). Kemudian ubah kode untuk mempertahankan struktur data ini. Gunakan konvensi bahwa qpi adalah -1 jika saya tidak berada dalam antrian, dan sertakan sebuah metode yang berisi () yang menguji kondisi ini. Anda perlu memodifikasi metode penolong exch () dan kurang () tapi tidak sink () atau berenang (). Latihan Web Kasus terbaik, rata-rata, dan terburuk dari heapsort. Apa kasus terbaik, kasus rata-rata, dan jumlah kasus terburuk untuk membandingkan serangkaian solusi N panjang. Jika kita mengizinkan duplikat, kasus terbaik adalah waktu linier (kunci sama N) jika kita melarang duplikat, kasus terbaiknya adalah N lg N dibandingkan (tapi masukan kasus terbaik tidak penting). Rata-rata dan jumlah kasus terburuk dari perbandingan adalah 2 N lg N dibandingkan. Lihat Analisis Heapsort untuk rinciannya. Kasus terbaik dan terburuk heapify. Berapa jumlah paling sedikit dan paling banyak perbandingan yang dibutuhkan untuk mengumpulkan serangkaian N item Solution. Heapifying array item N dalam urutan menurun memerlukan 0 pertukaran dan membandingkan N - 1. Heapating array item N dalam urutan menaik membutuhkan pertukaran N dan membandingkan 2N. Nomor taksi Tentukan bilangan bulat terkecil yang dapat dinyatakan sebagai jumlah batu bulat dalam dua cara yang berbeda (1,729), tiga cara yang berbeda (87,539,319), empat cara yang berbeda (6,963,472,309,248), lima cara berbeda (48,988,659,276,962,496), dan enam cara yang berbeda (24.153.319.581.254.312.065.344 ). Bilangan bulat tersebut diberi nomor Taxicab setelah cerita Ramanujan yang terkenal. Bilangan bulat terkecil yang dapat dinyatakan sebagai jumlah kubus bilangan bulat dalam tujuh cara yang berbeda saat ini tidak diketahui. Tuliskan sebuah program Taxicab.java yang berbunyi dalam parameter baris perintah N dan mencetak semua solusi trivial dari 3 b 3 c 3 d 3. sedemikian rupa sehingga a, b, c, dan d, kurang dari atau sama dengan N. Komputasi Nomor teori Temukan semua solusi untuk persamaan 2b 2 3c3 4d 4 dimana a, b, c, dan d kurang dari 100.000. Petunjuk Gunakan satu tumpukan min dan satu tumpukan maks. Penanganan interupsi Saat memprogram sistem real-time yang dapat terganggu (mis. Dengan klik mouse atau koneksi nirkabel), Anda perlu segera segera menyela, sebelum melanjutkan aktivitas saat ini. Jika interupsi harus ditangani dengan urutan yang sama, antrian FIFO adalah struktur data yang sesuai. Namun, jika berbeda interrupts memiliki prioritas yang berbeda (misalnya), maka kita perlu antrian prioritas. Simulasi jaringan antrian. Antrian MM1 untuk antrian paralel ganda, dll. Sulit untuk menganalisis jaringan antrian yang kompleks secara matematis. Sebaiknya gunakan simulasi untuk merencanakan distribusi waktu tunggu, dll. Perlu antrian prioritas untuk menentukan event mana yang akan di proses selanjutnya. Distribusi Zipf Gunakan hasil latihan sebelumnya untuk sampel dari distribusi Zipfian dengan parameter s dan N. Distribusi dapat mengambil nilai integer dari 1 ke N, dan mengambil nilai k dengan probabilitas 1ks sum (i 1 sampai N) 1is . Contoh: kata dalam Shakespeares bermain Hamlet dengan s kira-kira sama dengan 1. Random process. Mulailah dengan N sampah, masing-masing terdiri satu bola. Pilih salah satu bola N secara acak dan pindahkan bola ke tempat sampah secara acak sehingga probabilitas bola diletakkan di tempat sampah dengan bola m adalah mN. Apa distribusi bola yang dihasilkan setelah banyak iterasi Gunakan metode sampling acak yang dijelaskan di atas untuk membuat simulasi menjadi efisien. Tetangga terdekat Mengingat vektor N x 1. X 2. X N dari panjang M dan vektor x lainnya dengan panjang yang sama, temukan 20 vektor yang paling dekat dengan x. Lingkaran digambar pada selembar kertas grafik. Tulis sebuah program untuk menemukan radius lingkaran, berpusat pada titik asal, yang menyentuh 32 titik dengan koordinat x dan y bilangan bulat. Petunjuk: cari angka daripada yang bisa dinyatakan sebagai jumlah dua kotak dengan beberapa cara berbeda. Jawaban: ada dua Pythagoras tiga kali lipat dengan hipotiroid 25: 152 202 252, 72 242 252 yang menghasilkan 20 titik kisi tersebut di sana 22 buah Pythagoras berbeda tiga kali lipat dengan hipotetis 5,525 sehingga menghasilkan 180 titik kisi. 27.625 adalah radius terkecil yang menyentuh lebih dari 64. 154.136.450 memiliki 35 Pythagoras tiga kali lipat. Kekuatan sempurna Tuliskan program PerfectPower.java untuk mencetak semua kekuatan sempurna yang dapat direpresentasikan sebagai bilangan bulat panjang 64 bit: 4, 8, 9, 16, 25, 27. Kekuatan yang sempurna adalah angka yang dapat ditulis sebagai bilangan bulat untuk bilangan bulat Dan b ge 2. Penambahan floating point. Tambahkan nomor floating point N, hindari kesalahan roundoff. Hapus yang terkecil dua: tambahkan dua satu sama lain, dan masukkan kembali. Pertama-cocok untuk kemasan sampah. 1710 OPT 2, 119 OPT 4 (menurun). Gunakan pohon turnamen max dimana pemain adalah N bins dan nilai kapasitas yang tersedia. Tumpuk dengan minmax. Rancang tipe data yang mendukung push, pop, size, min, dan max (di mana min dan max adalah item minimum dan maksimum pada stack). Semua operasi harus mengambil waktu konstan dalam kasus terburuk. Petunjuk: Mengaitkan dengan setiap tumpukan entri item minimum dan maksimum saat ini di stack. Antrian dengan minmax Rancang tipe data yang mendukung enqueue, dequeue, ukuran, min, dan max (di mana min dan max adalah item minimum dan maksimum pada antrian). Semua operasi harus mengambil waktu diamortisasi konstan. Petunjuk: lakukan latihan sebelumnya dan simulasikan antrian dengan dua tumpukan. 2i 5j. Cetak nomor dari bentuk 2i 5j dalam rangka meningkatkan pesanan. Min-max heap. Rancang struktur data yang mendukung min dan max dalam waktu konstan, masukkan, hapus min, dan hapus max dalam waktu logaritmik dengan meletakkan item dalam satu array ukuran N dengan properti berikut: Array mewakili pohon biner yang lengkap. Kunci pada sebuah simpul pada tingkat genap kurang dari (atau sama dengan) tombol pada subtreenya kunci pada sebuah simpul pada tingkat ganjil lebih besar dari (atau sama dengan) tombol pada subpohonnya. Perhatikan bahwa nilai maksimal disimpan di root dan nilai minimum disimpan di salah satu akar anak. Min-Max Heaps dan Generalized Priority Queues Rentang kueri minimum. Dengan urutan item N, kueri minimum dari indeks i sampai j adalah indeks dari item minimum antara i dan j. Rancang struktur data yang menyusun urutan item N dalam waktu linier untuk mendukung kueri minimum dalam waktu logaritmik. Buktikan bahwa pohon biner lengkap dengan nodus N memiliki simpul daun langit-langit (N2) yang benar (nodus tanpa anak-anak). Antrian prioritas berorientasi Max dengan min. Berapakah tatanan waktu berjalan untuk menemukan kunci minimum dalam tumpukan biner berorientasikan maksimal. Solusi. Linearmdash kunci minimum bisa berada di salah satu himpunan daun langit-langit (N2). Antrian prioritas berorientasi Max dengan min. Rancang tipe data yang mendukung insert dan remove-the-maximum pada waktu logaritmik bersamaan dengan kedua max min dalam waktu konstan. Larutan. Buat tumpukan biner berorientasi-maks dan juga simpan kunci minimum yang dimasukkan sejauh ini (yang tidak akan pernah meningkat kecuali tumpukan ini menjadi kosong). Kth item terbesar lebih besar dari x. Dengan tumpukan biner berorientasi maksimum, rancang algoritma untuk menentukan apakah item terbesar kth lebih besar dari atau sama dengan x. Algoritma Anda harus berjalan dalam waktu yang sebanding dengan k. Solusi. Jika kunci di simpul lebih besar dari atau sama dengan x, rekursif cari subtree kiri dan subtree kanan. Berhenti bila jumlah simpul yang dieksplorasi sama dengan k (jawabannya adalah iya) atau tidak ada lagi simpul untuk dijelajahi (tidak). Kth item terkecil di tumpukan biner min-oriented. Rancang algoritma k log k untuk menemukan item kth terkecil dalam tumpukan biner min-oriented yang berisi item N. Larutan. Bangun timbunan min-oriented baru H. Kami tidak akan memodifikasi H. Masukkan akar H ke H bersamaan dengan indeks heapnya 1. Sekarang, berulang kali hapus item minimum x di H dan masukkan ke H kedua anak x dari H Item kth yang dihapus dari H adalah item kth terkecil di H. Randomized queue. Terapkan RandomQueue sehingga setiap operasi dijamin memakan waktu logaritmik paling banyak. Petunjuk Tidak mampu membeli dua kali lipat. Tidak ada cara mudah dengan linked list untuk mencari elemen acak dalam O (1) waktu. Sebagai gantinya, gunakan pohon biner lengkap dengan tautan eksplisit. Antrian FIFO dengan random deletion. Menerapkan tipe data yang mendukung operasi berikut: masukkan item. Hapus item yang baru saja ditambahkan. Dan hapus item acak. Setiap operasi harus mengambil (paling banyak) waktu logaritmik dalam kasus terburuk. Solusi. Gunakan pohon biner lengkap dengan link eksplisit menetapkan prioritas integer panjang i ke item ke-i ditambahkan ke struktur data. Top k jumlah dari dua array diurutkan. Dengan dua array berurutan a dan b, masing-masing panjang N, temukan jumlah k terbesar dari bentuk ai bj. Petunjuk Dengan menggunakan antrian prioritas (mirip dengan masalah pajak), Anda dapat mencapai algoritma O (k log N). Anehnya, dimungkinkan untuk melakukannya dalam waktu O (k) tapi algoritmanya rumit. Analisis empiris konstruksi tumpukan. Secara empiris membandingkan konstruksi tumpukan bottom-up linier versus konstruksi tumpukan top-down nano linear. Pastikan untuk membandingkannya dengan sejumlah nilai N. LaMarca dan Ladner melaporkan bahwa karena lokasi cache, algoritma naif dapat berjalan lebih baik dalam praktik daripada pendekatan yang lebih cerdas untuk nilai N yang besar (bila tumpukan tidak sesuai lagi dengan Cache) meskipun yang terakhir melakukan perbandingan dan pertukaran yang jauh lebih sedikit. Analisis empiris tumpukan multi jalan. Secara empiris membandingkan kinerja tumpukan 2 - 4- dan 8-way. LaMarca dan Ladner menyarankan beberapa pengoptimalan, dengan mempertimbangkan efek caching. Analisis empiris heapsort. Secara empiris membandingkan kinerja hembusan 2 - 4 dan 8-way. LaMarca dan Ladner menyarankan beberapa pengoptimalan, dengan mempertimbangkan efek caching. Data mereka menunjukkan bahwa timbin 8-bit yang dioptimalkan (dan memori-disetel) bisa dua kali lebih cepat dari heapsort klasik. Heapify dengan insersi. Misalkan Anda menggembung tumpukan biner pada kunci N dengan berulang kali memasukkan kunci berikutnya ke tumpukan biner. Tunjukkan bahwa jumlah total perbandingan paling banyak adalah Jawaban. Jumlah perbandingan paling banyak lg 1 lg 2. Lg N lg (N) N lg N. Heapify lower bound. (Gonnet and Munro) Tunjukkan bahwa setiap algoritma berbasis perbandingan untuk membangun tumpukan biner pada kunci N memerlukan setidaknya 1.3644 N dalam kasus terburuk. Jawaban. Gunakan argumen teoritis informasi, ala sorting lower bound. Ada N kemungkinan tumpukan (permutasi bilangan bulat N) pada tombol N yang berbeda, namun ada banyak tumpukan yang sesuai dengan urutan yang sama. Misalnya, ada dua tumpukan (c a b dan c b a) yang sesuai dengan 3 elemen aLets bayangkan kita memiliki array bilangan bulat seperti ini: Rata-rata diperoleh dengan rumus A (1n) xi (dengan i 1 sampai n). Jadi: x1n x2n. Xnn Kami membagi nilai saat ini dengan jumlah nilai dan menambahkan hasil sebelumnya ke nilai yang dikembalikan. Penandaan metode yang dikurangi adalah mengurangi fungsi callback dengan parameter sebagai berikut: hlm. Hasil perhitungan sebelumnya c. Nilai sekarang (dari indeks saat ini) i. Arus elemen array nilai indeks a. Array yang dikurangi saat ini Parameter pengurang kedua adalah nilai default. (Digunakan jika array kosong). Jadi rata-rata metode pengurangannya adalah: Jika Anda lebih suka Anda bisa membuat fungsi terpisah. Dan hanya merujuk pada metode callback signature Atau Augment the Array prototipe secara langsung. Kemungkinan untuk membagi nilai setiap kali mengurangi metode disebut. Atau bahkan lebih baik lagi. Dengan menggunakan metode Array.protoype.sum () yang telah ditentukan sebelumnya, optimalkan proses yang saya panggil hanya pembagiannya sekali :) Kemudian pada objek Array dalam lingkup: NB: sebuah array kosong dengan mengembalikan harapan NaN lebih benar dari pada 0 di Sudut pandang dan dapat berguna dalam kasus penggunaan khusus.1.5 Input dan Output Pada bagian ini kami memperluas himpunan abstraksi sederhana (input baris perintah dan keluaran standar) yang telah kita gunakan sebagai antarmuka antara program Java dan luar Dunia untuk memasukkan input standar Gambar standar Dan audio standar. Masukan standar memudahkan kita menulis program yang memproses jumlah input sewenang-wenang dan untuk berinteraksi dengan standar program kita sehingga memungkinkan kita untuk bekerja dengan grafis dan audio standar menambahkan suara. Tampilan mata burung Sebuah program Java mengambil nilai input dari command line dan mencetak string karakter sebagai output. Secara default, argumen command-line dan output standar dikaitkan dengan aplikasi yang mengambil perintah, yang kita sebut sebagai jendela terminal. Berikut adalah beberapa petunjuk untuk menggunakan command line di sistem anda. Mac middot Windows middot Linux Command-line arguments. Semua kelas kita memiliki metode main () yang mengambil array String sebagai argumen. Array itu adalah urutan argumen command-line yang kita ketikkan. Jika kita ingin argumen menjadi angka, kita harus menggunakan metode seperti Integer.parseInt () untuk mengubahnya dari String menjadi tipe yang sesuai. Keluaran standar Untuk mencetak nilai output dalam program kami, kami telah menggunakan System.out.println (). Java mengirimkan hasilnya ke aliran karakter abstrak yang dikenal sebagai output standar. Secara default, sistem operasi menghubungkan output standar ke jendela terminal. Semua output dalam program kami sejauh ini telah muncul di jendela terminal. RandomSeq.java menggunakan model ini: Dibutuhkan argumen baris perintah n dan dicetak ke keluaran standar urutan n nomor acak antara 0 dan 1. Untuk melengkapi model pemrograman kami, kami menambahkan perpustakaan berikut: Masukan standar. Baca nomor dan string dari pengguna. Gambar standar Plot grafis Audio standar Buat suara Keluaran standar. Metode Javas System.out.print () dan System.out.println () menerapkan abstraksi output standar dasar yang kita butuhkan. Namun demikian, untuk memperlakukan input standar dan keluaran standar dengan cara yang seragam (dan untuk memberikan beberapa perbaikan teknis), kami menggunakan metode serupa yang didefinisikan di perpustakaan StdOut kami: metode Javas print () dan println () adalah metode yang Anda miliki. Telah menggunakan Metode printf () memberi kita kontrol lebih besar terhadap tampilan output. Dasar-dasar pencetakan terformat. Dalam bentuknya yang paling sederhana, printf () membutuhkan dua argumen. Argumen pertama disebut format string. Ini berisi spesifikasi konversi yang menjelaskan bagaimana argumen kedua diubah menjadi string untuk output. Format string dimulai dengan dan diakhiri dengan kode konversi satu huruf. Tabel berikut merangkum kode yang paling sering digunakan: Format string. String format dapat berisi karakter selain untuk spesifikasi konversi. Spesifikasi konversi digantikan oleh nilai argumen (dikonversi ke string seperti yang ditentukan) dan semua karakter yang tersisa dilewatkan ke output. Beberapa argumen. Fungsi printf () dapat mengambil lebih dari dua argumen. Dalam kasus ini, format string akan memiliki spesifikasi konversi tambahan untuk setiap argumen tambahan. Berikut adalah lebih banyak dokumentasi tentang sintaks string format printf. Masukan standar. Perpustakaan StdIn kami mengambil data dari aliran input standar yang berisi urutan nilai yang dipisahkan oleh spasi. Setiap nilai adalah string atau nilai dari salah satu tipe primitif Javas. Salah satu fitur utama aliran input standar adalah program Anda menghabiskan nilai saat membacanya. Once your program has read a value, it cannot back up and read it again. The library is defined by the following API: We now consider several examples in detail. Typing input. When you use the java command to invoke a Java program from the command line, you actually are doing three things: (1) issuing a command to start executing your program, (2) specifying the values of the command-line arguments, and (3) beginning to define the standard input stream. The string of characters that you type in the terminal window after the command line is the standard input stream. For example, AddInts.java takes a command-line argument n . then reads n numbers from standard input and adds them, and prints the result to standard output: Input format. If you type abc or 12.2 or true when StdIn.readInt() is expecting an int . then it will respond with an InputMismatchException . StdIn treats strings of consecutive whitespace characters as identical to one space and allows you to delimit your numbers with such strings. Interactive user input. TwentyQuestions.java is a simple example of a program that interacts with its user. The program generates a random integer and then gives clues to a user trying to guess the number. The fundamental difference between this program and others that we have written is that the user has the ability to change the control flow while the program is executing. Processing an arbitrary-size input stream. Typically, input streams are finite: your program marches through the input stream, consuming values until the stream is empty. But there is no restriction of the size of the input stream. Average.java reads in a sequence of real numbers from standard input and prints their average. Redirection and piping. For many applications, typing input data as a standard input stream from the terminal window is untenable because doing so limits our programs processing power by the amount of data that we can type. Similarly, we often want to save the information printed on the standard output stream for later use. We can use operating system mechanisms to address both issues. Redirecting standard output to a file. By adding a simple directive to the command that invokes a program, we can redirect its standard output to a file, either for permanent storage or for input to some other program at a later time. For example, the command specifies that the standard output stream is not to be printed in the terminal window, but instead is to be written to a text file named data.txt . Each call to StdOut.print() or StdOut.println() appends text at the end of that file. In this example, the end result is a file that contains 1,000 random values. Redirecting standard output from a file. Similarly, we can redirect standard input so that StdIn reads data from a file instead of the terminal window. For example, the commandreads a sequence of numbers from the file data.txt and computes their average value. Specifically, the lt symbol is a directive to implement the standard input stream by reading from the file data.txt instead of by waiting for the user to type something into the terminal window. When the program calls StdIn.readDouble() . the operating system reads the value from the file. This facility to redirect standard input from a file enables us to process huge amounts of data from any source with our programs, limited only by the size of the files that we can store. Connecting two programs. The most flexible way to implement the standard input and standard output abstractions is to specify that they are implemented by our own programs This mechanism is called piping . For example, the following commandspecifies that the standard output for RandomSeq and the standard input stream for Average are the same stream. Filters. For many common tasks, it is convenient to think of each program as a filter that converts a standard input stream to a standard output stream in some way, RangeFilter.java takes two command-line arguments and prints on standard output those numbers from standard input that fall within the specified range.Your operating system also provides a number of filters. For example, the sort filter puts the lines on standard input in sorted order: Another useful filter is more . which reads data from standard input and displays it in your terminal window one screenful at a time. For example, if you type you will see as many numbers as fit in your terminal window, but more will wait for you to hit the space bar before displaying each succeeding screenful. Standard drawing. Now we introduce a simple abstraction for producing drawings as output. We imagine an abstract drawing device capable of drawing lines and points on a two-dimensional canvas. The device is capable of responding to the commands that our programs issue in the form of calls to static methods in StdDraw. The primary interface consists of two kinds of methods: drawing commands that cause the device to take an action (such as drawing a line or drawing a point) and control commands that set parameters such as the pen size or the coordinate scales. Basic drawing commands. We first consider the drawing commands: These methods are nearly self-documenting: StdDraw.line(x0, y0, x1, y1) draws a straight line segment connecting the point ( x 0 . y 0 ) with the point ( x 1 . y 1 ). StdDraw.point(x, y) draws a spot centered on the point ( x . y ). The default coordinate scale is the unit square (all x - and y -coordinates between 0 and 1). The standard implementation displays the canvas in a window on your computers screen, with black lines and points on a white background. Your first drawing. The HelloWorld for graphics programming with StdDraw is to draw a triangle with a point inside. Triangle.java accomplishes this with three calls to StdDraw.line() and one call to StdDraw.point() . Control commands. The default canvas size is 512-by-512 pixels and the default coordinate system is the unit square, but we often want to draw plots at different scales. Also, we often want to draw line segments of different thickness or points of different size from the standard. To accommodate these needs, StdDraw has the following methods:For example, the two-call sequence sets the drawing coordinates to be within a bounding box whose lower-left corner is at ( x 0 . y 0 ) and whose upper-right corner is at ( x 1 . y 1 ). Filtering data to a standard drawing. PlotFilter.java reads a sequence of points defined by ( x . y ) coordinates from standard input and draws a spot at each point. It adopts the convention that the first four numbers on standard input specify the bounding box, so that it can scale the plot. Plotting a function graph. FunctionGraph.java plots the function y sin(4 x ) sin(20 x ) in the interval (0, pi). There are an infinite number of points in the interval, so we have to make do with evaluating the function at a finite number of points within the interval. We sample the function by choosing a set of x -values, then computing y -values by evaluating the function at each x -value. Plotting the function by connecting successive points with lines produces what is known as a piecewise linear approximation .Outline and filled shapes. StdDraw also includes methods to draw circles, rectangles, and arbitrary polygons. Each shape defines an outline. When the method name is just the shape name, that outline is traced by the drawing pen. When the method name begins with filled . the named shape is instead filled solid, not traced.The arguments for circle() define a circle of radius r the arguments for square() define a square of side length 2r centered on the given point and the arguments for polygon() define a sequence of points that we connect by lines, including one from the last point to the first point. Text and color. To annotate or highlight various elements in your drawings, StdDraw includes methods for drawing text, setting the font, and setting the the ink in the pen.In this code, java.awt.Font and java.awt.Color are abstractions that are implemented with non-primitive types that you will learn about in Section 3.1. Until then, we leave the details to StdDraw . The default ink color is black the default font is a 16-point plain Serif font. Double buffering. StdDraw supports a powerful computer graphics feature known as double buffering . When double buffering is enabled by calling enableDoubleBuffering() . all drawing takes place on the offscreen canvas . The offscreen canvas is not displayed it exists only in computer memory. Only when you call show() does your drawing get copied from the offscreen canvas to the onscreen canvas . where it is displayed in the standard drawing window. You can think of double buffering as collecting all of the lines, points, shapes, and text that you tell it to draw, and then drawing them all simultaneously, upon request. One reason to use double buffering is for efficiency when performing a large number of drawing commands. Computer animations. Our most important use of double buffering is to produce computer animations . where we create the illusion of motion by rapidly displaying static drawings. We can produce animations by repeating the following four steps: Clear the offscreen canvas. Draw objects on the offscreen Copy the offscreen canvas to the onscreen canvas. Wait for a short while. In support of these steps, the StdDraw has several methods: The Hello, World program for animation is to produce a black ball that appears to move around on the canvas, bouncing off the boundary according to the laws of elastic collision. Suppose that the ball is at position ( x . y ) and we want to create the impression of having it move to a new position, say ( x 0.01, y 0.02). We do so in four steps: Clear the offscreen canvas to white. Draw a black ball at the new position on the offscreen canvas. Copy the offscreen canvas to the onscreen canvas. Wait for a short while. To create the illusion of movement, BouncingBall.java iterates these steps for a whole sequence of positions of the ball. Images. Our standard draw library supports drawing pictures as well as geometric shapes. The command StdDraw.picture(x, y, filename) plots the image in the given filename (either JPEG, GIF, or PNG format) on the canvas, centered on (x, y). BouncingBallDeluxe.java illustrates an example where the bouncing ball is replaced by an image of a tennis ball. User interaction. Our standard draw library also includes methods so that the user can interact with the window using the mouse.A first example. MouseFollower.java is the HelloWorld of mouse interaction. It draws a blue ball, centered on the location of the mouse. When the user holds down the mouse button, the ball changes color from blue to cyan. A simple attractor. OneSimpleAttractor.java simulates the motion of a blue ball that is attracted to the mouse. It also accounts for a drag force. Many simple attractors. SimpleAttractors.java simulates the motion of 20 blue balls that are attracted to the mouse. It also accounts for a drag force. When the user clicks, the balls disperse randomly. Springs. Springs.java implements a spring system. Standard audio. StdAudio is a library that you can use to play and manipulate sound files. It allows you to play, manipulate and synthesize sound. We introduce some some basic concepts behind one of the oldest and most important areas of computer science and scientific computing: digital signal processing . Concert A. Concert A is a sine wave, scaled to oscillate at a frequency of 440 times per second. The function sin( t ) repeats itself once every 2pi units on the x -axis, so if we measure t in seconds and plot the function sin(2pi t times 440) we get a curve that oscillates 440 times per second. The amplitude ( y -value) corresponds to the volume. We assume it is scaled to be between minus1 and 1. Other notes. A simple mathematical formula characterizes the other notes on the chromatic scale. They are divided equally on a logarithmic (base 2) scale: there are twelve notes on the chromatic scale, and we get the i th note above a given note by multiplying its frequency by the ( i 12)th power of 2. When you double or halve the frequency, you move up or down an octave on the scale. For example 880 hertz is one octave above concert A and 110 hertz is two octaves below concert A. Sampling. For digital sound, we represent a curve by sampling it at regular intervals, in precisely the same manner as when we plot function graphs. We sample sufficiently often that we have an accurate representation of the curvemdasha widely used sampling rate is 44,100 samples per second. It is that simple: we represent sound as an array of numbers (real numbers that are between minus1 and 1).For example, the following code fragment plays concert A for 10 seconds. Play that tune. PlayThatTune.java is an example that shows how easily we can create music with StdAudio . It takes notes from standard input, indexed on the chromatic scale from concert A, and plays them on standard audio. Write a program MaxMin.java that reads in integers (as many as the user enters) from standard input and prints out the maximum and minimum values. Write a program Stats.java that takes an integer command-line argument n . reads n floating-point numbers from standard input, and prints their mean (average value) and sample standard deviation (square root of the sum of the squares of their differences from the average, divided by n minus1). Write a program LongestRun.java that reads in a sequence of integers and prints out both the integer that appears in a longest consecutive run and the length of the run. For example, if the input is 1 2 2 1 5 1 1 7 7 7 7 1 1 . then your program should print Longest run: 4 consecutive 7s . Write a program WordCount.java that reads in text from standard input and prints out the number of words in the text. For the purpose of this exercise, a word is a sequence of non-whitespace characters that is surrounded by whitespace. Write a program Closest.java that takes three floating-point command-line arguments (x, y, z), reads from standard input a sequence of point coordinates ((xi, yi, zi)), and prints the coordinates of the point closest to ((x, y, z)). Recall that the square of the distance between ((x, y, z)) and ((xi, yi, zi)) is ((x - xi)2 (y - yi)2 (z - zi)2). For efficiency, do not use Math.sqrt() or Math.pow() . Given the positions and masses of a sequence of objects, write a program to compute their center-of-mass or centroid. The centroid is the average position of the n objects, weighted by mass. If the positions and masses are given by ( x i . y i . m i ), then the centroid ( x . y . m ) is given by: Write a program Centroid.java that reads in a sequence of positions and masses ( x i . y i . m i ) from standard input and prints out their center of mass ( x . y . m ). Petunjuk model your program after Average.java. Write a program Checkerboard.java that takes a command-line argument n and plots an n-by-n checkerboard with red and black squares. Color the lower-left square red. Write a program Rose.java that takes a command-line argument n and plots a rose with n petals (if n is odd) or 2n petals (if n is even) by plotting the polar coordinates (r, theta) of the function r sin(n times theta) for theta ranging from 0 to 2pi radians. Below is the desired output for n 4, 7, and 8. Write a program Banner.java that takes a string s from the command line and display it in banner style on the screen, moving from left to right and wrapping back to the beginning of the string as the end is reached. Add a second command-line argument to control the speed. Write a program Circles.java that draws filled circles of random size at random positions in the unit square, producing images like those below. Your program should take four command-line arguments: the number of circles, the probability that each circle is black, the minimum radius, and the maximum radius. Creative Exercises Spirographs. Write a program Spirograph.java that takes three command-line arguments R, r, and a and draws the resulting spirograph. A spirograph (technically, an epicycloid) is a curve formed by rolling a circle of radius r around a larger fixed circle or radius R. If the pen offset from the center of the rolling circle is (ra), then the equation of the resulting curve at time t is given by Such curves were popularized by a best-selling toy that contains discs with gear teeth on the edges and small holes that you could put a pen in to trace spirographs. For a dramatic 3d effect, draw a circular image, e.g. earth.gif instead of a dot, and show it rotating over time. Heres a picture of the resulting spirograph when R 180, r 40, and a 15. Clock. Write a program Clock.java that displays an animation of the second, minute, and hour hands of an analog clock. Use the method StdDraw.show(1000) to update the display roughly once per second. Petunjuk this may be one of the rare times when you want to use the operator with a double - it works the way you would expect. Oscilloscope. Write a program Oscilloscope.java to simulate the output of an oscilloscope and produce Lissajous patterns. These patterns are named after the French physicist, Jules A. Lissajous, who studied the patterns that arise when two mutually perpendicular periodic disturbances occur simultaneously. Assume that the inputs are sinusoidal, so tha the following parametric equations describe the curve: Take the six parameters A x . w x . theta x . theta y . w y . and theta y from the command line. For example, the first image below has Ax Ay 1, w x 2, w y 3, theta x 20 degrees, theta y 45 degrees. The other has parameters (1, 1, 5, 3, 30, 45) Web Exercises Word and line count. Modify WordCount.java so that reads in text from standard input and prints out the number of characters, words, and lines in the text. Rainfall problem. Write a program Rainfall.java that reads in nonnegative integers (representing rainfall) one at a time until 999999 is entered, and then prints out the average of value (not including 999999). Remove duplicates. Write a program Duplicates.java that reads in a sequence of integers and prints back out the integers, except that it removes repeated values if they appear consecutively. For example, if the input is 1 2 2 1 5 1 1 7 7 7 7 1 1, your program should print out 1 2 1 5 1 7 1. Run length encoding. Write a program RunLengthEncoder.java that encodes a binary input using run length encoding. Write a program RunLengthDecoder.java that decodes a run length encoded message. Head and tail. Write programs Head.java and Tail.java that take an integer command line input N and print out the first or last N lines of the given file. (Print the whole file if it consists of For example the message VENI, VIDI, VICI is converted to YHQL, YLGL, YLFL. Write a program Caesar.java that takes a command-line argument k and applies a Caesar cipher with shift k to a sequence of letters read from standard input. If a letter is not an uppercase letter, simply print it back out. Caesar cipher decoding. How would you decode a message encrypted using a Caesar cipher Hint . you should not need to write any more code. Parity check. A Boolean matrix has the parity property when each row and each column has an even sum. This is a simple type of error-correcting code because if one bit is corrupted in transmission (bit is flipped from 0 to 1 or from 1 to 0) it can be detected and repaired. Heres a 4 x 4 input file which has the parity property: Write a program ParityCheck.java that takes an integer N as a command line input and reads in an N-by-N Boolean matrix from standard input, and outputs if (i) the matrix has the parity property , or (ii) indicates which single corrupted bit (i, j) can be flipped to restore the parity property, or (iii) indicates that the matrix was corrupted (more than two bits would need to be changed to restore the parity property). Use as little internal storage as possible. Hint: you do not even have to store the matrix Takagis function. Plot Takagis function: everywhere continuous, nowhere differentiable. Hitchhiker problem. You are interviewing N candidates for the sole position of American Idol. Every minute you get to see a new candidate, and you have one minute to decide whether or not to declare that person the American Idol. You may not change your mind once you finish interviewing the candidate. Suppose that you can immediately rate each candidate with a single real number between 0 and 1, but of course, you dont know the rating of the candidates not yet seen. Devise a strategy and write a program AmericanIdol that has at least a 25 chance of picking the best candidate (assuming the candidates arrive in random order), reading the 500 data values from standard input. Solution: interview for N2 minutes and record the rating of the best candidate seen so far. In the next N2 minutes, pick the first candidate that has a higher rating than the recorded one. This yields at least a 25 chance since you will get the best candidate if the second best candidate arrives in the first N2 minutes, and the best candidate arrives in the final N2 minutes. This can be improved slightly to 1e 0.36788 by using essentially the same strategy, but switching over at time Ne. Nested diamonds. Write a program Diamonds.java that takes a command line input N and plots N nested squares and diamonds. Below is the desired output for N 3, 4, and 5. Regular polygons. Create a function to plot an N-gon, centered on (x, y) of size length s. Use the function to draws nested polygons like the picture below. Bulging squares. Write a program BulgingSquares.java that draws the following optical illusion from Akiyoshi Kitaoka The center appears to bulge outwards even though all squares are the same size. Spiraling mice. Suppose that N mice that start on the vertices of a regular polygon with N sides, and they each head toward the nearest other mouse (in counterclockwise direction) until they all meet. Write a program to draw the logarithmic spiral paths that they trace out by drawing nested N-gons, rotated and shrunk as in this animation. Spiral. Write a program to draw a spiral like the one below. Globe. Write a program Globe.java that takes a real command-line argument alpha and plots a globe-like pattern with parameter alpha. Plot the polar coordinates (r, theta) of the function f(theta) cos(alpha times theta) for theta ranging from 0 to 7200 degrees. Below is the desired output for alpha 0.8, 0.9, and 0.95. Drawing strings. Write a program RandomText.java that takes a string s and an integer N as command line inputs, and writes the string N times at a random location, and in a random color. 2D random walk. Write a program RandomWalk.java to simulate a 2D random walk and animate the results. Start at the center of a 2N-by-2N grid. The current location is displayed in blue the trail in white. Rotating table. You are seated at a rotating square table (like a lazy Susan), and there are four coins placed in the four corners of the table. Your goal is to flip the coins so that they are either all heads or all tails, at which point a bell rings to notify you that you are done. You may select any two of them, determine their orientation, and (optionally) flip either or both of them over. To make things challenging, you are blindfolded, and the table is spun after each time you select two coins. Write a program RotatingTable.java that initializes the coins to random orientations. Then, it prompts the user to select two positions (1-4), and identifies the orientation of each coin. Next, the user can specify which, if any of the two coins to flip. The process repeats until the user solves the puzzle. Rotating table solver. Write another program RotatingTableSolver.java to solve the rotating table puzzle. One effective strategy is to choose two coins at random and flip them to heads. However, if you get really unlucky, this could take an arbitrary number of steps. Goal: devise a strategy that always solves the puzzle in at most 5 steps. Hex. Hex is a two-player board game popularized by John Nash while a graduate student at Princeton University, and later commercialized by Parker Brothers. It is played on a hexagonal grid in the shape of an 11-by-11 diamond. Write a program Hex.java that draws the board. Projectile motion with drag. Write a program BallisticMotion.java that plots the trajectory of a ball that is shot with velocity v at an angle theta. Account for gravitational and drag forces. Assume that the drag force is proportional to the square of the velocity. Using Newtons equations of motions and the Euler-Cromer method, update the position, velocity, and acceleration according to the following equations: Use G 9.8, C 0.002, and set the initial velocity to 180 and the angle to 60 degrees. Heart. Write a program Heart.java to draw a pink heart: Draw a diamond, then draw two circles to the upper left and upper right sides. Changing square. Write a program that draws a square and changes its color each second. Simple harmonic motion. Repeat the previous exercise, but animate the Lissajous patterns as in this applet. Ex: A B w x w y 1, but at each time t draw 100 (or so) points with phi x ranging from 0 to 720 degrees, and phi x ranging from 0 to 1080 degrees. Bresenhams line drawing algorithm. To plot a line segment from (x1, y1) to (x2, y2) on a monitor, say 1024-by-1024, you need to make a discrete approximation to the continuous line and determine exactly which pixels to turn on. Bresenhams line drawing algorithm is a clever solution that works when the slope is between 0 and 1 and x1 Modify Bresenhams algorithm to handle arbitrary line segments. Millers madness. Write a program Madness.java to plot the parametric equation: where the parameter t is in radians. You should get the following complex picture. Experiment by changing the parameters and produce original pictures. Fays butterfly. Write a program Butterfly.java to plot the polar equation: where the parameter t is in radians. You should get an image like the following butterfly-like figure. Experiment by changing the parameters and produce original pictures. Student database. The file students.txt contains a list of students enrolled in an introductory computer science class at Princeton. The first line contains an integer N that specifies the number of students in the database. Each of the next N lines consists of four pieces of information, separated by whitespace: first name, last name, email address, and section number. The program Students.java reads in the integer N and then N lines of data of standard input, stores the data in four parallel arrays (an integer array for the section number and string arrays for the other fields). Then, the program prints out a list of students in section 4 and 5. Shuffling. In the October 7, 2003 California state runoff election for governor, there were 135 official candidates. To avoid the natural prejudice against candidates whose names appear at the end of the alphabet (Jon W. Zellhoefer), California election officials sought to order the candidates in random order. Write a program program Shuffle.java that takes a command-line argument N, reads in N strings from standard input, and prints them back out in shuffled order. (California decided to randomize the alphabet instead of shuffling the candidates. Using this strategy, not all N possible outcomes are equally likely or even possible For example, two candidates with very similar last names will always end up next to each other.) Reverse. Write a program Reverse.java that reads in an arbitrary number of real values from standard input and prints them in reverse order. Time series analysis. This problem investigates two methods for forecasting in time series analysis. Moving average or exponential smoothing. Polar plots. Create any of these polar plots. Java games. Use StdDraw.java to implement one of the games at javaunlimited. Consider the following program. Suppose the file input.txt contains the following integers: What is the contents of the array a after running the following command High-low. Shuffle a deck of cards, and deal one to the player. Prompt the player to guess whether the next card is higher or lower than the current card. Repeat until player guesses it wrong. Game show. used this. Elastic collisions. Write a program CollidingBalls.java that takes a command-line argument n and plots the trajectories of n bouncing balls that bounce of the walls and each other according to the laws of elastic collisions. Assume all the balls have the same mass. Elastic collisions with obstacles. Each ball should have its own mass. Put a large ball in the center with zero initial velocity. Brownian motion. Statistical outliers. Modify Average.java to print out all the values that are larger than 1.5 standard deviations from the mean. You will need an array to store the values. Optical illusions. Create a Kofka ring or one of the other optical illusions collected by Edward Adelson. Computer animation. In 1995 James Gosling presented a demonstration of Java to Sun executives, illustrating its potential to deliver dynamic and interactive Web content. At the time, web pages were fixed and non-interactive. To demonstrate what the Web could be, Gosling presented applets to rotate 3D molecules, visualize sorting routines, and Duke cart-wheeling across the screen. Java was officially introduced in May 1995 and widely adopted in the technology sector. The Internet would never be the same. Program Duke.java reads in the 17 images T1.gif through T17.gif and produces the animation. To execute on your computer, download the 17 GIF files and put in the same directory as Duke.java . (Alternatively, download and unzip the file duke.zip or duke.jar to extract all 17 GIFs.) Cart-wheeling Duke. Modify Duke.java so that it cartwheels 5 times across the screen, from right to left, wrapping around when it hits the window boundary. Repeat this cart-wheeling cycle 100 times. Petunjuk after displaying a sequence of 17 frames, move 57 pixels to the left and repeat. Name your program MoreDuke.java. Tac (cat backwards). Write a program Tac.java that reads lines of text from standard input and prints the lines out in reverse order. Game. Implement the game dodge using StdDraw . move a blue disc within the unit square to touch a randomly placed green disc, while avoiding the moving red discs. After each touch, add a new moving red disc. Simple harmonic motion. Create an animation like the one below from Wikipedia of simple harmonic motion. Yin yang. Draw a yin yang using StdDraw.arc() . Twenty questions. Write a program QuestionsTwenty.java that plays 20 questions from the opposite point of view: the user thinks of a number between 1 and a million and the computer makes the guesses. Use binary search to ensure that the computer needs at most 20 guesses. Write a program DeleteX.java that reads in text from standard input and deletes all occurrences of the letter X. To filter a file and remove all Xs, run your program with the following command: Write a program ThreeLargest.java that reads integers from standard input and prints out the three largest inputs. Write a program Pnorm.java that takes a command-line argument p, reads in real numbers from standard input, and prints out their p-norm . The p-norm norm of a vector (x 1 . x N ) is defined to be the pth root of (x 1 p x 2 p . x N p ). Consider the following Java program. Suppose that the file input.txt contains the integers 1 and 1. What does the following command do Modify Add.java so that it re-asks the user to enter two positive integers if the user types in a non-positive integer. Modify TwentyQuestions.java so that it re-asks the user to enter a response if the user types in something other than true or false . Hint: add a do-while loop within the main loop. Nonagram. Write a program to plot a nonagram. Star polygons. Write a program StarPolygon.java that takes two command line inputs p and q, and plots the -star polygon. Complete graph. Write a program to plot that takes an integer N, plots an N-gon, where each vertex lies on a circle of radius 256. Then draw a gray line connecting each pair of vertices. Necker cube. Write a program NeckerCube.java to plot a Necker cube. What happens if you move the StdDraw.clear(Color.BLACK) command to before the beginning of the while loop in BouncingBall.java. Jawaban. try it and observe a nice woven 3d pattern with the given starting velocity and position. What happens if you change the parameter of StdDraw.show() to 0 or 1000 in BouncingBall.java. Write a program to plot a circular ring of width 10 like the one below using two calls to StdDraw.filledCircle() . Write a program to plot a circular ring of width 10 like the one below using a nested for loop and many calls to StdDraw.point() . Write a program to plot the Olympic rings. Write a program BouncingBallDeluxe.java that embellishes BouncingBall.java by playing a sound effect upon collision with the wall using StdAudio and the sound file pipebang.wav. Last modified on February 20, 2017. Copyright copy 2000ndash2016 Robert Sedgewick and Kevin Wayne. Seluruh hak cipta.
Scalping-sabah-forex
Xe-forex-rates-india