Mengapa saya dapat melihat grafik dan segera menemukan titik terdekat ke titik lain, tetapi butuh saya O (n) waktu melalui pemrograman?


122

Izinkan saya mengklarifikasi:

Diberikan sebaran beberapa titik tertentu n, jika saya ingin menemukan titik terdekat dengan titik mana pun dalam plot secara mental, saya dapat langsung mengabaikan sebagian besar titik dalam grafik, mempersempit pilihan saya ke beberapa titik kecil yang konstan di sekitar .

Namun, dalam pemrograman, diberikan satu set titik n, untuk menemukan titik terdekat dengan titik mana pun, diperlukan pengecekan setiap titik lainnya, yaitu waktu.O(n)

Saya menduga bahwa tampilan visual grafik kemungkinan setara dengan beberapa struktur data yang tidak dapat saya pahami; karena dengan pemrograman, dengan mengonversi poin ke metode yang lebih terstruktur seperti quadtree, seseorang dapat menemukan titik terdekat ke titik dalam dalam waktu , atau diamortisasi waktu.n k ? log ( n ) O ( log n )knk?log?(n)O(log?n)

Tetapi masih belum ada algoritma amortisasi diketahui (yang dapat saya temukan) untuk pencarian titik setelah restrukturisasi data.O(1)

Jadi mengapa ini tampak mungkin hanya dengan inspeksi visual?


36
Anda sudah mengetahui semua poin dan secara kasar di mana mereka berada; "driver perangkat lunak" untuk mata Anda telah melakukan kerja keras untuk menafsirkan gambar. Dalam analogi Anda, Anda menganggap karya ini "gratis" padahal kenyataannya tidak. Jika Anda sudah memiliki struktur data yang memecah posisi titik menjadi semacam representasi octotree Anda bisa melakukan jauh lebih baik daripada O (n). Banyak pra-pemrosesan terjadi di bagian bawah sadar otak Anda sebelum informasi bahkan mencapai bagian sadar; jangan pernah lupakan itu dalam analogi semacam ini.
Richard Tingle

20
Saya pikir setidaknya salah satu asumsi Anda tidak berlaku secara umum. anggap semua titik diatur pada lingkaran dengan perturbasi 'kecil' dan 1 titik tambahan P menjadi pusat lingkaran. Jika Anda ingin menemukan titik terdekat dengan P, Anda tidak bisa mengabaikan salah satu poin lain dalam grafik.
collapsar

4
Karena otak kita benar-benar luar biasa! Kedengarannya seperti jawaban yang murah tapi itu benar. Kami benar-benar tidak tahu banyak tentang bagaimana pemrosesan gambar kami (tampaknya paralel masif) bekerja.
Carl Witthoft

7
Pada dasarnya, otak Anda menggunakan partisi ruang tanpa Anda sadari. Fakta bahwa ini muncul sangat cepat tidak berarti ini adalah waktu yang konstan - Anda bekerja dengan resolusi yang terbatas, dan perangkat lunak pengolah gambar Anda dirancang untuk itu (dan bahkan mungkin menangani semua itu secara paralel). Fakta bahwa Anda menggunakan seratus juta CPU kecil untuk melakukan preprocessing tidak menempatkan Anda pada - itu hanya melakukan operasi yang rumit pada banyak prosesor kecil. Dan jangan lupa merencanakan untuk kertas 2D - yang sendiri memiliki setidaknya . O ( n )O(1)O(n)
Luaan

9
Tidak yakin apakah itu telah disebutkan, tetapi otak manusia bekerja sangat berbeda dari sistem komputasi tipe SISD von Neumann. Yang sangat relevan di sini adalah bahwa, seperti yang saya pahami, otak manusia secara inheren paralel dan terutama ketika menyangkut pemrosesan rangsangan indera: Anda dapat mendengar, melihat, dan merasakan banyak hal pada saat yang bersamaan dan (secara kasar, tetap) sadar semuanya secara bersamaan. Saya berkonsentrasi menulis komentar tetapi melihat meja saya, sekaleng soda, jaket saya tergantung di pintu, pena di meja saya, dll. Otak Anda dapat memeriksa banyak titik secara bersamaan.
Patrick87

Jawaban:


115

Model Anda tentang apa yang Anda lakukan secara mental tidak benar. Bahkan, Anda beroperasi dalam dua langkah:

  1. Hilangkan semua poin yang terlalu jauh, dalam waktu.O(1)
  2. Ukur titik yang sedekat, dalam waktu .Θ ( m )mΘ(m)

Jika Anda pernah bermain gim seperti pétanque (mangkuk) atau keriting, ini seharusnya sudah biasa - Anda tidak perlu memeriksa benda-benda yang sangat jauh dari target, tetapi Anda mungkin perlu mengukur pesaing terdekat.

Untuk menggambarkan titik ini, titik hijau mana yang paling dekat dengan titik merah? (Hanya dengan sedikit lebih dari 1 piksel, tetapi ada satu yang paling dekat.) Untuk mempermudah, titik-titik tersebut bahkan diberi kode warna berdasarkan jarak.

awan poin

Gambar ini berisi titik yang hampir berada di lingkaran, dan titik hijau secara total. Langkah 1 memungkinkan Anda menghilangkan semua kecuali tentang poin , tetapi langkah 2 membutuhkan memeriksa setiap poin . Tidak ada apriori yang terikat untuk .n ? 10 m m mm=10n?10mmm

Pengamatan fisik memungkinkan Anda mengecilkan ukuran masalah dari seluruh set poin ke set kandidat terbatas poin . Langkah ini bukan langkah perhitungan seperti yang biasa dipahami, karena didasarkan pada proses yang berkelanjutan. Proses berkelanjutan tidak tunduk pada intuisi biasa tentang kompleksitas komputasi dan khususnya analisis asimptotik.mnm

Sekarang, Anda mungkin bertanya, mengapa proses yang berkelanjutan tidak dapat menyelesaikan masalah sepenuhnya? Bagaimana sampai pada poin ini , mengapa kita tidak bisa memperbaiki proses untuk mendapatkan ?m = 1mm=1

Jawabannya adalah bahwa saya sedikit curang: Saya menyajikan satu set poin yang dihasilkan terdiri dari poin yang paling dekat dan poin yang lebih jauh. Secara umum, menentukan titik mana yang berada dalam batas yang tepat membutuhkan pengamatan yang tepat yang harus dilakukan poin demi poin. Proses eliminasi yang kasar memungkinkan Anda mengecualikan banyak kandidat yang bukan kandidat, tetapi hanya menentukan kandidat mana yang tersisa yang perlu disebutkan.n - mmn?m

Anda dapat memodelkan sistem ini dalam dunia komputasi yang terpisah. Asumsikan bahwa titik-titik diwakili dalam struktur data yang mengurutkannya menjadi sel-sel pada kisi, yaitu titik disimpan dalam daftar untuk sel . Jika Anda mencari titik yang paling dekat dengan dan sel yang berisi titik ini paling banyak berisi satu titik lain, maka itu sudah cukup untuk memeriksa sel yang berisi dan 8 sel tetangga. Jumlah total poin dalam 9 sel ini adalah . Model ini menghormati beberapa sifat utama dari model manusia:( ? x ? , ? y ? ) ( x 0 , y 0 ) m(x,y)(?x?,?y?)(x0,y0)m

  • m berpotensi tidak terbatas - kasus yang lebih buruk merosot misalnya titik-titik yang terletak hampir pada lingkaran selalu mungkin.
  • Efisiensi praktis tergantung pada pemilihan skala yang cocok dengan data (mis. Anda tidak akan menghemat apa pun jika titik-titik Anda berada di selembar kertas dan sel Anda selebar 1 km).

9
Terlebih lagi, tidak semua grafik dapat diproyeksikan ke dataran sehingga jarak Euklidian cocok dengan jarak dalam grafik (misalnya jika bobot tepi tidak membentuk metrik).
Raphael

5
@Raphael Saya mengerti pertanyaan tentang geometri komputasi daripada teori grafik, tapi memang ini adalah komplikasi tambahan.
Gilles

2
@Gilles Done . Saya baru belajar istilah geometri komputasi .
gerrit

2
Ini mungkin nit-pick, saya bisa mengerti apa yang Anda coba tunjukkan, tetapi sebagai orang yang buta warna "pilih hijau terdekat dengan merah" menyebabkan banyak kepala menggaruk titik mana yang mana. Hanya sesuatu untuk dipikirkan di masa depan - pilih kombinasi warna lain selain merah / hijau!
tpg2114

3
@ tpg2114 Jangan lupa merah / hijau bukan satu-satunya jenis buta warna. Menampilkannya dengan bentuk (atau atribut apa pun selain warna) akan lebih inklusif daripada "kombinasi warna lain selain merah / hijau".
Jonathan Van Matre

42

Alasannya adalah bahwa data telah dimasukkan ke dalam "struktur data" yang dioptimalkan untuk permintaan ini dan bahwa waktu preprocessing dalam mempersiapkan grafik harus dimasukkan dalam waktu yang diukur yang sebanding dengan jumlah titik, memberikan O (n) kompleksitas di sana.

Jika Anda meletakkan koordinat dalam tabel yang mencantumkan koordinat X dan Y dari setiap titik, Anda akan membutuhkan upaya mental yang jauh lebih besar untuk menghitung jarak antar titik, mengurutkan daftar jarak dan memilih yang terkecil.

Sebagai contoh dari kueri yang tidak berfungsi dengan baik secara visual, akan melihat langit malam dan - berdasarkan hanya pada tampilan Anda dan tabel koordinat masing-masing bintang - temukan bintang terdekat dengan Bumi atau tanda astrologi memiliki jarak terkecil antara bintang-bintang itu terdiri dari. Di sini Anda akan memerlukan model 3D yang dapat diperbesar dan dapat diputar untuk menentukan ini secara visual, di mana komputer akan menganggap ini pada dasarnya masalah yang sama seperti aslinya.


2
+1 - Saya sedang mencari seseorang yang membuat poin ini tepat. Representasi data yang masuk penting - coba cari median daftar yang diurutkan vs yang tidak disortir!
cloudfeet

21

Pertanyaan ini dimulai dari premis yang salah. Anda hanya berpikir secara mental Anda dapat menemukan titik terdekat dalam poin , tetapi pada kenyataannya, jika Anda tidak bisa. Rasanya seperti itu karena Anda terbiasa berurusan dengan grafik yang sangat kecil, tetapi contoh-contoh kecil bisa menyesatkan, ketika kita berurusan dengan kompleksitas asimptotik. Jika Anda mencoba melakukan ini dengan plot sebaran dengan satu miliar poin, Anda akan segera menemukan bahwa Anda tidak dapat melakukannya dalam waktu .O ( 1 )O(1)O(1)


8
Bayangkan menempatkan satu miliar poin di sepanjang lingkaran, tetapi semua sedikit terganggu sedikit, sehingga poin Anda membentuk cincin yang tampak fuzzy. Untuk menemukan titik terdekat dari pusat dengan mata, saya tidak melihat bagaimana Anda bisa melakukan jauh lebih baik daripada memeriksa semua poin satu per satu.
Nick Alger

4
@NickAlger Jadi lebih seperti O(numberOfPointsAboutTheSameDistanceFromTheTargetPointAsTheClosestPoint), yang belum tentu terkait n. Either way, saya pikir jawaban untuk ini harus menyajikan struktur data yang mungkin dalam hal bagaimana pikiran manusia merasakan dan mempertanyakannya. Cukup mengatakan itu bukan O (1) terasa ... malas? tidak memadai?
Dukeling

5
@Dukeling O (sesuatu) mengacu pada kasus terburuk. Jika ada tata letak di mana otak manusia tidak dapat melakukannya dalam waktu yang konstan, maka jelas bukan O (1). Jika ada batas X di mana otak manusia dapat memproses titik X dalam waktu konstan, tetapi tidak dapat memproses titik X * 2 sama sekali - maka itu bukan O (1).
Peteris

3
@Dukeling Ini tidak selalu tergantung pada n, karena pada kasus terburuk itu sama dengan n, dan jika Anda telah memberikan n poin arbitrer Anda harus berharap bahwa mungkin tidak mungkin untuk melakukannya lebih cepat daripada operasi C * n.
Peteris

2
@Peteris Saya kira kita tidak setuju pada apa artinya menjadi "harus bergantung pada n" dan bagaimana menentukan batas atas terdekat.
Dukeling

15

Keunggulan inspeksi visual bergantung pada tempat-tempat penting yang tidak dapat dijamin secara umum:

  • O(n)

  • hitung : (lih. komentar Nick Alger pada jawaban yang diberikan oleh DW) mengasumsikan jumlah poin melebihi jumlah sel retina Anda - Anda bahkan tidak akan mengidentifikasi semua poin yang terlibat.

  • varians : (lih. komentar Nick Alger pada jawaban yang diberikan oleh DW) mengasumsikan satu set poin pada kisi reguler (misalnya heksagonal) yang menjadi sasaran gangguan acak kecil. jika gangguan ini menjadi kurang dari resolusi retina Anda (atau grid overlay lainnya), Anda tidak hanya akan kesulitan untuk mendeteksi jarak minimum aktual tetapi memilih pasangan poin yang salah dengan probabilitas tinggi.

O(n)O(1)


1
O(n)O(log(n))

O(n)nO(nlogn)n

15
  1. Komputer sedang memecahkan masalah yang berbeda. Dibutuhkan daftar poin, bukan gambar poin raster. Konversi dari daftar ke gambar, yaitu "memplot" titik, membutuhkan O(n)waktu.

    Cepat! Yang paling dekat dengan (1,2):

    • (9, 9)
    • (5, 2)
    • (3, -2)
    • (4, 3)
    • (0, 4)
    • (1, 9)

    Jauh lebih sulit, bukan? Saya yakin jika saya membuat daftar dua kali lebih lama Anda harus melakukan dua kali lebih banyak pekerjaan.

  2. Anda tidak menyadari seberapa banyak pekerjaan yang dilakukan otak Anda. Anda tidak "hanya tahu" titik mana yang lebih dekat. Otak Anda sedang melakukan pekerjaan komputasi untuk mencari tahu jawaban itu dan membuatnya tersedia. Otak bekerja pada setiap titik secara paralel, sehingga waktu untuk menyelesaikannya kira-kira sama, tetapi jumlah pekerjaan yang dibutuhkan masih meningkat seiring dengan jumlah titik.


13

Untuk alasan yang sama ketika Anda melihat sebuah segitiga dan tahu itu adalah segitiga, Anda melupakan jutaan perhitungan yang Anda lakukan tanpa menyadarinya.

Jaringan saraf

Akibatnya Anda adalah jaringan saraf yang telah dilatih dan sarat dengan massa pada massa data.

Ambil game pengurutan bentuk bayi sebagai contoh:

masukkan deskripsi gambar di sini

Ketika seorang anak pertama kali berinteraksi dengan ini, kemungkinan mereka akan berusaha memasukkan bentuk ke dalam lubang yang salah, ini karena mereka belum melatih otak mereka atau menemukan cukup data untuk membangun jaringan. Mereka tidak dapat membuat asumsi tentang tepi, ukuran, dll. Untuk menentukan bentuk mana yang cocok dengan lubang.

Ini nampak jelas bagi Anda (saya harap) karena Anda telah membangun koneksi ini, Anda bahkan mungkin berpikir itu intuitif dan tidak perlu memecahnya, misalnya Anda hanya tahu segitiga cocok dengan segitiga dan tidak perlu memperkirakan ukurannya. , hitung ujungnya, .etc. Ini tidak benar, Anda telah melakukan semua itu di alam bawah sadar Anda, satu-satunya pikiran sadar yang Anda miliki adalah segitiga. Berjuta-juta perhitungan terjadi dari mengambil representasi visual, memahami apa yang diwakilinya, memahami apa elemen individu dan kemudian memperkirakan jarak mereka, fakta bahwa Anda memiliki database besar informasi untuk polling membuatnya lebih sederhana.

Otakmu bukan biner

Data yang bekerja di otak Anda bukan biner (Sejauh yang kami tahu), tidak benar atau salah, ia menyatakan banyak negara yang kami gunakan untuk menginterpretasikan data, kami juga sering melakukan kesalahan, bahkan ketika kami mengikuti yang benar proses, ini karena data sering berubah. Saya akan menebak bahwa otak kita berfungsi lebih seperti komputer kuantum di mana bit berada dalam keadaan perkiraan sampai dibaca. Artinya, jika otak kita bekerja seperti komputer sama sekali, itu benar-benar tidak diketahui.

Karenanya suatu algoritma untuk bekerja dengan data biner tidak akan berfungsi sama. Anda tidak dapat membandingkan keduanya. Di kepala Anda, Anda menggunakan konsep untuk melakukan, tipe data kaya yang menyimpan lebih banyak informasi, Anda memiliki kemampuan untuk membuat tautan di mana mereka tidak didefinisikan secara eksplisit; saat melihat segitiga Anda mungkin berpikir tentang sisi Gelap Pink Floyd dari penutup bulan.

masukkan deskripsi gambar di sini

Kembali ke grafik sebar, tidak ada alasan Anda tidak bisa melakukan ini di komputer menggunakan bitmap dan mengukur jarak dari suatu titik dalam meningkatkan jari-jari sampai Anda menemukan titik lain. Ini mungkin yang terdekat dengan perkiraan manusia. Ini mungkin jauh lebih lambat karena keterbatasan data dan karena otak kita tidak perlu peduli dengan kompleksitas komputasi dan mengambil rute yang rumit untuk melakukan sesuatu.

Bukan O (1), atau bahkan O (n) jika n adalah jumlah titik, sebaliknya kompleksitasnya sekarang tergantung pada jarak linear maksimum dari titik yang dipilih ke batas gambar.

tl; dr

Otak Anda bukan komputer biner.



8

Anda lupa satu langkah penting: memplot semua titik itu pada grafik yang Anda lihat.

ini karena kebutuhan operasi O (n).

setelah ini komputer dapat menggunakan perangkat lunak pengenal gambar untuk menemukan titik perkiraan terdekat ke pusat dengan cara yang sama seperti mata manusia. Ini adalah kasus terburuk operasi O (sizeOfImage).

bagi manusia untuk melakukan hal yang sama seperti komputer ingat bahwa komputer mendapatkan daftar koordinat dan hanya dapat melihat satu pada saat itu.


1
Jika seseorang memilih "resolusi" yang konstan, seseorang dapat menggunakan algoritma yang merupakan waktu O (log (resolusi)) per titik untuk memplotnya dan mengidentifikasi semua titik yang "dekat" dengan tempat tujuan. O (log (resolusi)) samar-samar analog dengan fakta bahwa perlu waktu lebih lama untuk memplot poin secara akurat di atas kertas daripada melakukannya dengan kurang tepat. Perhatikan juga bahwa meningkatkan resolusi akan meningkatkan biaya algoritme per-semua-poin untuk menghilangkan poin non-kandidat, tetapi mengurangi jumlah titik non-terdekat yang bisa dihilangkan.
supercat

7

Interpretasi saya atas pertanyaan:

Saya tidak percaya pertanyaan ini harus disederhanakan sebagai masalah kompleksitas geometri komputasi. Itu harus dipahami dengan lebih baik dengan mengatakan: kita merasakan kemampuan untuk menemukan jawaban dalam waktu yang konstan, ketika kita bisa. Apa yang menjelaskan persepsi ini, dan hingga penjelasan ini serta keterbatasan manusia, dapat dilakukan komputer juga.

O(1)O(log(n))

Ini mungkin diperkuat oleh hukum Weber-Fechner , yang menyatakan bahwa persepsi kita harus diukur pada skala logaritmik dari ukuran fisik aktual. Dengan kata lain, kami mempersepsikan variasi relatif daripada variasi absolut. Ini misalnya mengapa intensitas suara diukur dalam desibel.

O(log(n))Oψ(log(log(n)))Oψ

Oψ(log(log(n))) yang untuk semua tujuan praktis mungkin secara perseptual tidak dapat dibedakan dari konstanta, dan perlu beberapa waktu konstan ditambahkan untuk memulai proses pengenalan dan mengakui hasilnya.

Mempertimbangkan keterbatasan fisiologis

Kesimpulan di atas lebih lanjut dipertahankan ketika mempertimbangkan langkah-langkah akuisisi gambar.

OP berhati-hati untuk memisahkan konstruksi struktur data yang tepat, "seperti quadtree", yang diamortisasi pada beberapa pertanyaan.

Ini tidak berfungsi untuk kebanyakan orang yang tidak menghafal gambar. Saya pikir gambar dipindai untuk setiap permintaan, tetapi itu tidak menyiratkan pemindaian semua poin: bukan yang pertama kali, dan bukan untuk permintaan nanti.

TscanTscan

mOψ(log(log(m)))

227log2(27)

Tanpa mengetahui unit aktual yang akan digunakan, ini hanya menunjukkan bahwa variasi untuk pemrosesan paling buruk berada pada urutan yang sama dengan operasi waktu konstan lainnya. Oleh karena itu, sangat wajar bahwa waktu yang dirasakan untuk menemukan titik terdekat terasa konstan. . . apakah kita menentukan titik terdekat atau hanya satu set titik terdekat.

Tentang contoh tandingan dan kemungkinan solusi

Tentu saja mudah untuk membangun contoh tandingan yang membuat penentuan mata dari titik terdekat menjadi sangat sulit di antara sekumpulan kecil titik terdekat. Inilah sebabnya mengapa OP sebenarnya meminta algoritma yang menghilangkan sebagian besar poin dengan cepat, kecuali yang terdekat. Masalah kemungkinan kesulitan memilih di antara beberapa titik dekat ini ditekankan dalam banyak jawaban, dengan contoh paradigmatik dari titik terdekat yang hampir berada pada lingkaran di sekitar titik referensi. Biasanya hukum Weber-Fechner menghalangi untuk bisa membedakan variasi jarak kecil pada jarak yang cukup jauh. Efek ini sebenarnya dapat ditingkatkan dengan adanya titik-titik lain yang, meskipun dihilangkan, dapat merusak persepsi jarak. Jadi mencoba mengidentifikasi titik terdekat akan menjadi tugas yang lebih sulit, dan mungkin memerlukan langkah-langkah pemeriksaan khusus, seperti menggunakan instrumen, yang akan sepenuhnya menghancurkan perasaan waktu yang konstan. Tetapi tampaknya jelas di luar kisaran percobaan yang dipertimbangkan oleh OP, karenanya tidak terlalu relevan.

Pertanyaan untuk dijawab , yang merupakan pertanyaan yang sebenarnya ditanyakan oleh OP, adalah apakah ada cara untuk menghilangkan sebagian besar poin, kecuali mungkin untuk beberapa yang tersisa yang tampaknya memiliki jarak yang sangat mirip dengan titik referensi.

O(log(n))

Menolak biaya diamortisasi tidak memungkinkan untuk solusi komputer, karena semua poin harus diperhatikan. Ini menggarisbawahi perbedaan utama dalam daya komputasi otak dan persepsi manusia: ia dapat menggunakan komputasi analog dengan sifat-sifat yang sangat berbeda dari komputasi digital . Ini biasanya terjadi ketika miliaran titik tidak dapat dibedakan oleh mata, yang tidak memiliki resolusi untuk melihat apa pun kecuali awan besar dengan berbagai nuansa gelap. Tetapi mata kemudian dapat fokus pada bagian yang lebih kecil yang relevan, dan melihat sejumlah titik yang dibatasi, yang mengandung titik yang relevan. Itu tidak harus mengetahui semua poin secara individual. Agar komputer melakukan hal yang sama, Anda harus memberikannya sensor yang sama, daripada koordinat numerik yang tepat dari setiap titik. Ini masalah yang sangat berbeda.

"Mere inspeksi visual" dalam beberapa hal jauh lebih kuat daripada perhitungan digital. Dan itu juga disebabkan oleh fisika sensor, bukan hanya karena kekuatan komputasi yang mungkin lebih besar dari otak.


O(1)O(log?n) O(1)O(1)O(log?n)ketika Anda menyelesaikan tugas di luar pengakuan persepsi belaka, misalnya menemukan nomor yang diberikan dalam representasi grafis dari tumpukan biner seimbang dengan node berlabel. perhatikan bahwa pengekangan persepsi tidak masalah karena Anda hanya memeriksa grafik secara lokal.
collapsar

n

Oψ(log(log(n)))

4

Kami memiliki siswa dalam ujian yang, ketika ditanya seberapa cepat Anda dapat mengurutkan array, akan mengklaim bahwa komputer itu bodoh, dan membutuhkan n * log (n) (atau lebih buruk), sementara manusia dapat melakukannya lebih cepat.

Jawaban profesor saya selalu: Saya akan memberikan daftar 10.000 item. Mari kita lihat apakah Anda dapat menemukan metode yang lebih cepat dari apa yang akan dilakukan komputer.

Dan kemudian: berapa banyak inti pemrosesan yang terlibat ketika Anda mencoba menemukan titik terdekat? Anda bukan mesin prosesor tunggal, Anda memiliki jaringan saraf, yang memiliki beberapa fleksibilitas ketika datang ke tugas-tugas seperti ini.


1
Ditambah berbagai aspek dari apa yang Anda ketahui tentang data dan sumber daya apa yang Anda miliki saat Anda perlu menyortir. Misalnya, jika teman-teman sekolah Anda perlu menyortir sesuatu yang tidak dapat masuk sepenuhnya di ruangan mereka.
Thorbj?rn Ravn Andersen

@ Thorbj?rnRavnAndersen: ini bagus untuk memahami betapa pentingnya kompleksitas ruang adalah "sesuatu yang tidak bisa sepenuhnya masuk ke dalam ruangan" 8 ^)
Zane

3

Saya percaya @ Patrick87 memberi Anda petunjuk: mata dan otak Anda adalah mesin komputasi paralel masif. Beberapa berpendapat bahwa ini tidak menjelaskan masalah ini, karena untuk masalah besar yang sewenang-wenang sejumlah prosesor paralel tidak ada bedanya.

Tetapi itu ada di sini: sebagaimana disiratkan oleh banyak orang, mata (dan otak) Anda memiliki kapasitas terbatas untuk menyelesaikan masalah ini; dan ini karena seseorang tidak dapat memenuhi sejumlah poin dalam rentang pandangan manusia normal. Mata Anda harus bisa membedakannya untuk permulaan, dan jika ada terlalu banyak, maka mereka akan begitu dekat daripada mata Anda tidak akan melihat perbedaannya. Intinya: itu cepat untuk poin cukup baik yang sesuai dengan pandangan normal Anda, yaitu sangat sedikit. Dalam kasus lain itu akan gagal.

Jadi, Anda dapat menyelesaikan masalah ini di O (1) untuk kasus kecil dan sederhana yang dapat diproses oleh otak Anda dengan mudah. Di luar itu, itu tidak bisa dan karena itu, itu bahkan bukan O ( apa pun ) karena kemungkinan besar gagal.


1

Tidak ada yang menyebutkan bahwa masalah ini dapat diselesaikan dengan sangat cepat pada komputer dengan indeks spasial. Ini sama dengan memplot poin dalam gambar agar mata Anda memindai dengan cepat dan menghilangkan sebagian besar poin.

Ada algoritma pengindeksan yang sangat baik yang digunakan oleh Google dan lainnya untuk menemukan titik terdekat yang disebut Geohash. http://en.wikipedia.org/wiki/Geohash .

Saya pikir ini akan meningkatkan kontes yang mendukung komputer. Saya tidak terkesan dengan beberapa jawaban yang menggunakan pemikiran linear.


Θ(n) Θ(lg?n)

Intinya adalah bahwa indeks spasial membuatnya kira-kira semudah bagi manusia yang melihat layar yang dipenuhi dengan titik-titik.
reinierpost

1

Jika kita mempertimbangkan kasus menemukan tetangga terdekat di set titik n-dimensi dalam ruang Euclidean, kompleksitas biasanya dibatasi oleh jumlah dimensi saat ia tumbuh besar (yaitu lebih besar dari ukuran dataset).

O(logd?2?n)

Masalah menemukan titik terdekat ke sebuah simpul dalam grafik memiliki ekspresi Euclidean setiap kali grafik dapat tertanam ke dalam ruang Euclidean dengan distorsi yang cukup kecil. Dan menggunakan daftar adjacency dengan bobot, kita masih perlu membangun daftar adjacency.

O(1)


-1

jawaban lain baik tetapi bagaimana dengan pertanyaan penghitung zen yang memperluas dasar pemikiran / premis dari pertanyaan asli ke ekstrem untuk menunjukkan beberapa kesalahan [tetapi juga paradoks pada inti penelitian AI ]:

jika saya dapat berpikir dengan kecerdasan manusia, mengapa saya tidak dapat membuat komputer yang berpikir sebaik manusia?

ada beberapa cara untuk menjawab pertanyaan Anda, tetapi pada dasarnya, proses berpikir dan kemampuan persepsi otak kita belum tentu dapat diakses untuk introspeksi, dan introspeksi yang kita lakukan pada mereka bisa menyesatkan. misalnya kita dapat mengenali objek tetapi kita tidak memiliki cara untuk memahami / menjelaskan proses kuasi-algoritmik yang berlangsung untuk memungkinkan ini. juga ada banyak eksperimen psikologi yang menunjukkan ada distorsi halus dalam persepsi kita tentang realitas dan khususnya persepsi waktu, lihat misalnya persepsi waktu .

pada umumnya dianggap / diperkirakan oleh para ilmuwan bahwa otak manusia sebenarnya menggunakan algoritma tetapi fungsinya berbeda dari yang terkomputerisasi, dan juga ada sejumlah besar pemrosesan paralel yang terjadi di otak melalui jaringan saraf yang tidak dapat dibandingkan secara masuk akal dengan algoritma komputer berurutan . pada mamalia, persentase yang signifikan dari seluruh volume otak didedikasikan untuk pemrosesan visual.

dengan kata lain otak manusia dalam banyak hal adalah komputer visual yang sangat dioptimalkan, dan mereka sebenarnya dalam banyak hal memiliki kemampuan yang melebihi superkomputer terhebat dunia saat ini, seperti dalam pengenalan objek dan sebagainya, dan itu disebabkan oleh kekurangan (sebagai perbandingan) dalam perangkat lunak / perangkat keras buatan manusia dibandingkan dengan biologi yang telah sangat disetel / dikembangkan / dioptimalkan selama jutaan tahun.


O(f(n))

-2

Secara umum Anda memecahkan dua masalah yang berbeda dan jika Anda bersaing dalam kompetisi yang sama, kompleksitas akan menjadi O (1) untuk Anda berdua. Mengapa? Mari kita buat situasi sedikit lebih sederhana - asumsikan bahwa Anda memiliki garis dengan satu titik merah dan titik hijau. Tugas Anda adalah menemukan titik hijau yang paling dekat dengan titik merah. Semuanya ada di grafik. Sekarang apa yang Anda lakukan dan apa yang Anda lakukan program pada dasarnya sama - hanya "berjalan pergi" (di kedua arah) dari titik merah dan memeriksa apakah piksel yang Anda lihat adalah putih / hitam (latar belakang) atau hijau. Sekarang kompleksitasnya adalah O (1).

Yang menarik adalah bahwa beberapa metode penyajian data segera memberikan jawaban atas beberapa pertanyaan (O (1)). Contoh dasar sangat sederhana - cukup hitung piksel putih pada gambar hitam (setiap nilai piksel adalah 0 = hitam atau 1 = putih). Yang perlu Anda lakukan hanyalah menambahkan semua nilai piksel - kompleksitasnya sama untuk 1 piksel putih dan 1000, tetapi itu tergantung pada ukuran gambar - O (m), m = image.width * image.height. Apakah mungkin melakukannya lebih cepat? Tentu saja, semua yang perlu kita lakukan adalah menggunakan metode berbeda untuk menyimpan gambar yang merupakan gambar integral : masukkan deskripsi gambar di sini Sekarang menghitung hasilnya adalah O (1) (jika Anda memiliki gambar integral sudah dihitung). Cara lain adalah hanya menyimpan semua piksel putih dalam array / vektor / daftar / ... dan hitung saja ukurannya - O (1).


O(1)O(1)

@ FrankW - jadi apa kerumitan "berjalan pergi"? Saya tidak berusaha mengatakan bahwa Anda salah, saya hanya ingin tahu. Menghitung ukuran array / vektor / daftar - umumnya ukuran array konstan sehingga tidak perlu menghitungnya, vektor - saya tidak yakin, saya akan mengatakan itu tergantung pada implementasi (tetapi kemungkinan besar di sebagian besar implementasi itu hanya bidang bidang) sebuah objek sehingga tidak perlu menghitungnya), daftar - Anda benar, itu bukan O (1) - kesalahan saya.
cyriel

kkO(#pixels)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.
Judi bola