Diberikan dan , b , d ∉ { 0 }
Pertanyaan saya adalah:
Diberikan
- Dengan asumsi kita dapat memutuskan dalam , apakah ada cara untuk memutuskan tanpa harus terlebih dahulu membentuk multiplikasi (atau divisi), dan . Atau ada semacam bukti bahwa tidak mungkin.O ( | x | + | y | ) a d < c b a ⋅ d c ⋅ b
- Apakah ada metode yang lebih cepat untuk membandingkan bilangan rasional daripada mengalikan penyebutnya.
algorithms
integers
Realz Slaw
sumber
sumber
Jawaban:
Penelitian saya saat ini:
Upaya awal pada beberapa aturan umum
Seseorang dapat mencoba membuat beberapa aturan umum untuk menyelesaikan perbandingan rasional:
Dengan asumsi semua positif :a,b,c,d
Aturan lain:
Mulai dari sini, kita akan menganggap bahwa , karena kalau tidak kita dapat menyelesaikannya dengan aturan di atas, atau membalikkan pertanyaan menjadi , dan bagaimanapun kita berakhir dengan kondisi ini.a<c∧b<d cd<?ab
Aturan : Ini Pada dasarnya aturan menyatakan bahwa Anda selalu dapat mengurangi pembilang dari penyebut, dan mengatur hasilnya sebagai pembilang, untuk mendapatkan masalah yang setara. Saya akan meninggalkan buktinya.
Aturan ini memungkinkan Anda untuk mengurangi pembilang dan penyebut kiri dari pembilang dan penyebut kanan untuk masalah yang setara.
Dan tentu saja ada scaling:
Menggunakan aturan-aturan ini Anda dapat bermain-main dengan hal-hal, menerapkannya berulang kali, dalam kombinasi cerdas, tetapi ada kasus di mana angka-angka dekat, dan patologis.
Dengan menerapkan aturan sebelumnya, Anda dapat mengurangi semua masalah ini ke:
Terkadang Anda bisa menyelesaikannya secara langsung sekarang, kadang tidak. Kasus patologis biasanya dalam bentuk:
Kemudian Anda membalikkannya, dan menghasilkan hal yang sama, hanya dengan sedikit kurang Setiap aplikasi aturan + flip menguranginya dengan digit / bit. AFAICT, Anda tidak dapat dengan cepat menyelesaikannya, kecuali jika Anda menerapkan aturan kali (satu kali untuk setiap digit / bit) dalam kasus patologis, meniadakan keuntungan yang tampak.O(n)
Masalah terbuka ??
Saya menyadari bahwa masalah ini tampaknya lebih sulit daripada beberapa masalah terbuka saat ini.
Masalah yang bahkan lebih lemah adalah menentukan:
Namun lebih lemah:
Ini adalah masalah terbuka untuk memverifikasi multiplikasi . Itu lebih lemah, karena jika Anda memiliki cara untuk menentukan , maka kamu dapat dengan mudah menentukan , dengan menguji menggunakan algoritma dua kali, , . Jika salah benar, Anda tahu itu .ad<?bc ad=?bc ad<?bc bc<?ad ad≠bc
Sekarang, adalah masalah terbuka, setidaknya pada tahun 1986:ad=?c
Sangat menarik, ia juga menyebutkan pertanyaan memverifikasi perkalian matriks :
Ini telah dipecahkan, dan memang mungkin untuk memverifikasi dalam waktu dengan algoritma acak (dengan menjadi ukuran matriks input, jadi pada dasarnya waktu linear dalam ukuran input). Saya bertanya-tanya apakah mungkin untuk mengurangi perkalian bilangan bulat ke perkalian matriks, terutama dengan kesamaan mereka, mengingat kesamaan multiplikasi bilangan bulat Karatsuba dengan algoritma perkalian matriks yang diikuti. Maka mungkin dengan beberapa cara kita dapat memanfaatkan algoritma verifikasi perkalian matriks untuk perkalian integer.O(n2) n×n
Lagi pula, karena ini masih, setahu saya, masalah terbuka, masalah yang lebih kuat dari pasti terbuka. Saya ingin tahu apakah menyelesaikan masalah verifikasi kesetaraan akan berpengaruh pada masalah verifikasi ketidaksetaraan perbandingan.ad<?cd
Sedikit variasi dari masalah kita adalah jika fraksi dijamin akan dikurangi ke tingkat terendah; dalam hal ini mudah untuk mengetahui apakah . Apakah ini ada kaitannya dengan verifikasi perbandingan untuk fraksi yang dikurangi?ab=?cd
Pertanyaan yang bahkan lebih halus, bagaimana jika kami memiliki cara untuk menguji , apakah ini akan mencakup pengujian ? Saya tidak mengerti bagaimana Anda dapat menggunakan "dua arah" ini seperti yang kami lakukan untuk .ad<?c ad=?c ad<?cd
Terkait:
Perkiraan Pengakuan Bahasa Non-reguler oleh Finite Automata
Mereka mengerjakan beberapa perkiraan perkalian, dan verifikasi acak, yang saya tidak sepenuhnya mengerti.
sumber
Ini adalah upaya yang sangat parsial untuk menolak. Misalkan kita hanya dapat menggunakan penambahan (jumlah konstan) dan pengurangan pada penentu kita, serta jumlah konstan wrt angka yang telah ditentukan. Dengan kata lain, kita dapat melakukan jumlah konstan dari , , dll dalam penentuan kita. Maka jumlah yang dapat kita hitung adalah dalam bentuk mana adalah konstanta yang telah ditentukan sebelumnya. Perhatikan bahwa dapat dihitung dalam waktu .mod mod 2 mod 3 q=k1a+k2b+k3c+k4d=∑kia k q O(∑|a|)
Diedit Penentu ini dimaksudkan untuk menentukan sedikit iff . Pertimbangkan mengambil sebagai poin dalam . Bit ditentukan oleh posisinya di permukaan yang merupakan hiperboloid dalam 4 dimensi. Jika kita memiliki titik di ruang input, penentu di atas dapat menghitung titik dalam jarak terbatas dari titik input ini, yaitu titik-titik dll. Ini mendefinisikan berbentuk kubus dalam ruang 4 d.B:B=1 ad>bc a,b,c,d R4 B ad=bc (a,b,c,d) q:|q−a|=k1,
(Bagaimana membuat ini lebih tepat?) Jarak dari kuboid ke permukaan secara umum tidak terbatas, dan karenanya permukaan tidak dapat dihitung oleh penentu.
sumber
Pertanyaan bagus. Apakah Anda akan menerima tingkat kepercayaan?
Mungkin melakukan perkiraan pembagian. Yaitu
Untuk menghitung perkiraan quotients terikat dari a / b, geser ke kanan dengan ceil (log_2 (b)) dan juga dengan floor (log_2 (b)). Maka kita tahu hasil bagi yang akurat adalah antara kedua nilai ini.
Kemudian, tergantung pada ukuran relatif dari empat bilangan bulat, seseorang mungkin dapat mengesampingkan kasus-kasus tertentu, dan mendapatkan kepercayaan 100%.
Seseorang dapat mengulangi prosedur untuk radix selain 2, dan dengan suksesi operasi semacam itu meningkatkan tingkat kepercayaan, sampai suatu perubahan tanda / tie-break teramati?
Itu adalah sketsa konsep metode pertama saya.
sumber
Tentu.
Ide: Bandingkan ekspansi desimal sedikit demi sedikit.
Satu-satunya hal yang buruk adalah bahwa kita harus mengecualikan kesetaraan terlebih dahulu karena kalau tidak kita tidak boleh mengakhiri.
Sangat berguna untuk pertama-tama membandingkan bagian integer karena itu mudah.
Pertimbangkan ini:
Perhatikan bahwa
do-while
loop harus diakhiri karena angkanya tidak sama. Kami tidak tahu berapa lama itu berjalan; jika angkanya sangat dekat, bisa jadi sementara.Jelas, tidak ada perkalian yang mahal; satu-satunya yang kita butuhkan adalah mengalikan nominator dengan . Secara khusus, kami menghindari penghitungan dan secara eksplisit.10 ad cb
Apakah ini cepat? Mungkin tidak. Ada banyak divisi integer, modulos, dan
gdc
s untuk dihitung, dan kami memiliki loop yang jumlah iterasinya berbanding terbalik dengan jarak antara angka yang kami bandingkan.Metode pembantu:
sumber