


Struktur Data JavaScript dan Algoritma Graf dan Graf Algoritma_Pengetahuan Asas
Takrifan graf
Graf terdiri daripada set bucu tak kosong terhingga dan set tepi antara bucu Ia biasanya dinyatakan sebagai: G(V,E), dengan G mewakili graf dan V ialah bucu graf G. . Set, E ialah set tepi dalam graf G.
Graf terarah
Tepi berarah: Jika tepi dari bucu Vi ke Vj mempunyai arah, maka tepi ini dipanggil tepi terarah, juga dipanggil lengkok (Lengkok), diwakili oleh pasangan tertib
Graf tidak tertib
Tepi tidak berarah: Jika tepi antara bucu Vi dan Vj tidak mempunyai arah, tepi ini dipanggil tepi tidak berarah (Tepi) dan diwakili oleh pasangan tidak tertib (Vi, Vj).
Gambar ringkas
Graf mudah: Dalam struktur graf, jika tiada tepi dari bucu ke dirinya sendiri, dan tepi yang sama tidak muncul berulang kali, maka graf sedemikian dipanggil graf ringkas.
Grafik
mewakili bucu
Langkah pertama dalam mencipta kelas graf ialah mencipta kelas Vertex untuk menyimpan bucu dan tepi. Fungsi kelas ini adalah sama dengan kelas Node senarai terpaut dan pepohon carian binari. Kelas Vertex mempunyai dua ahli data: satu yang mengenal pasti bucu, dan nilai Boolean yang menunjukkan sama ada ia telah dilawati. Mereka dinamakan label dan wasVisited masing-masing.
fungsi Vertex(label){
This.label = label;
}
Kami menyimpan semua bucu dalam tatasusunan, dan dalam kelas graf, mereka boleh dirujuk oleh kedudukan mereka dalam tatasusunan
mewakili kelebihan
Maklumat sebenar graf disimpan pada "tepi" kerana ia menerangkan struktur graf. Nod induk pokok binari hanya boleh mempunyai dua nod anak, tetapi struktur graf adalah lebih fleksibel.
Kami memanggil kaedah mewakili tepi graf sebagai senarai bersebelahan atau tatasusunan senarai bersebelahan. Ia akan menyimpan tatasusunan yang terdiri daripada senarai bucu bersebelahan sesuatu bucu
Rajah pembinaan
Tentukan kelas Graf seperti berikut:
fungsi Graf(v){
This.vertices = v;//vertices titik tertinggi
This.edges = 0;
This.adj = [];
for(var i =0;I
This.adj[i].push('');
}
This.addEdge = addEdge;
This.toString = toString;
}
Kelas ini merekodkan bilangan tepi yang diwakili oleh graf dan merekodkan bilangan bucu menggunakan panjang dan bilangan bucu dalam graf.
fungsi addEdge(){
This.adj[v].push(w);
This.adj[w].push(v);
This.edges ;
}
Di sini kita menggunakan gelung for untuk menambah sub-tatasusunan pada setiap elemen dalam tatasusunan untuk menyimpan semua bucu bersebelahan dan memulakan semua elemen kepada rentetan kosong.
Perjalanan graf
Perjalanan mendalam-pertama
DepthFirstSearch, juga dikenali sebagai carian depth-first, dirujuk sebagai DFS.
Contohnya, jika anda mencari kunci di dalam bilik, anda boleh mulakan dari mana-mana bilik Cari sudut, meja sisi katil, katil, bawah katil, almari pakaian, kabinet TV dan lain-lain di dalam bilik satu persatu. , supaya tidak terlepas mana-mana Dead ends, selepas mencari semua laci dan kabinet penyimpanan, kemudian cari bilik sebelah.
Kedalaman carian pertama:
Carian pertama mendalam ialah melawati bucu yang belum dilawati, menandainya sebagai dilawati, dan kemudian mengakses bucu lain yang belum dilawati secara rekursif dalam senarai bersebelahan bucu awal
Tambah tatasusunan pada kelas Graf:
this.marked = [];//Simpan bucu yang dilawati
for(var i=0;i
}
Fungsi carian mendalam-pertama:
fungsi dfs(v){
This.marked[v] = true;
//Pernyataan if tidak diperlukan di sini
If(this.adj[v] != undefined){
print("Puncak yang dilawati: " v );
untuk setiap (var w dalam ini.adj[v]){
Jika(!ini.ditandakan[w]){
This.dfs(w);
}
}
}
}
Pencarian luas didahulukan
Breadth-first search (BFS) ialah kaedah carian buta yang bertujuan untuk mengembangkan dan memeriksa semua nod dalam graf secara sistematik untuk mencari hasil. Dalam erti kata lain, ia tidak mengambil kira kemungkinan lokasi hasil dan mencari keseluruhan graf dengan teliti sehingga keputusan ditemui.
Carian keluasan didahulukan bermula dari bucu pertama dan cuba melawat bucu sedekat mungkin dengannya, seperti yang ditunjukkan di bawah:
Prinsip kerjanya ialah:
1. Mula-mula cari bucu yang belum dilawati bersebelahan dengan bucu semasa dan tambahkannya pada senarai bucu yang dilawati dan baris gilir;
2. Kemudian ambil bucu v seterusnya daripada graf dan tambahkannya pada senarai bucu yang dilawati
3. Akhir sekali, tambahkan semua bucu yang belum dilawati bersebelahan dengan v pada baris gilir
Berikut ialah takrifan fungsi carian luas pertama:
var baris gilir = [];
This.marked = benar;
Queue.push(s);//Tambah pada penghujung baris gilir
While(queue.length>0){
var v = queue.shift();//Alih keluar daripada kepala baris gilir
If(v == undefined){
print("Puncak yang dilawati: " v);
}
untuk setiap (var w dalam ini.adj[v]){
Jika(!ini.ditandakan[w]){
This.edgeTo[w] = v;
This.marked[w] = true;
queue.push(w);
}
}
}
}
Laluan terpendek
Apabila melakukan carian luas pertama, laluan terpendek dari satu bucu ke satu bucu bersambung ditemui secara automatik
Tentukan laluan
Untuk mencari laluan terpendek, anda perlu mengubah suai algoritma carian pertama keluasan untuk merekodkan laluan dari satu bucu ke bucu lain Kami memerlukan tatasusunan untuk menyimpan semua tepi dari satu bucu ke bucu seterusnya tepi tatasusunanKepada
this.edgeTo = [];//Tambah baris ini pada kelas Graf
//fungsi bfs
bfs(s) fungsi{
var baris gilir = [];
This.marked = benar;
Queue.push(s);//Tambah pada penghujung baris gilir
While(queue.length>0){
var v = queue.shift();//Alih keluar daripada kepala baris gilir
If(v == undefined){
print("Puncak yang dilawati: " v);
}
untuk setiap (var w dalam ini.adj[v]){
Jika(!ini.ditandakan[w]){
This.edgeTo[w] = v;
This.marked[w] = true;
queue.push(w);
}
}
}
}
Algoritma pengisihan topologi
Isihan topologi akan mengisih semua bucu graf terarah supaya tepi terarah menghala dari bucu sebelumnya ke bucu kemudian.
Algoritma pengisihan topologi adalah serupa dengan BFS Perbezaannya ialah algoritma pengisihan topologi tidak serta-merta mengeluarkan bucu yang dilawati Sebaliknya, ia melawati semua bucu bersebelahan dalam senarai bucu semasa tidak akan ditolak senarai itu habis dalam timbunan.
Algoritma pengisihan topologi dibahagikan kepada dua fungsi Fungsi pertama ialah topSort(), yang digunakan untuk menyediakan proses pengisihan dan memanggil fungsi tambahan topSortHelper(), dan kemudian memaparkan senarai puncak yang diisih
.Kerja utama algoritma pengisihan topologi diselesaikan dalam fungsi rekursif topSortHelper(). Akhirnya, puncak semasa ditolak ke tindanan.
//topSort() fungsi
fungsi topSort(){
timbunan var = [];
var dilawati = [];
for(var i =0;i
}
for(var i = 0;i
This.topSortHelper(i,visited,stack);
}
}
for(var i = 0;i
print(this.vertexList[tindanan[i]]);
}
}
}
//topSortHelper() fungsi
fungsi topSortHelper(v,dilawati,tindan){
dilawati[v] = benar;
untuk setiap (var w dalam ini.adj[v]){
Jika(!melawat[w]){
This.topSortHelper(dilawati[w],dilawati,tindan);
}
}
stack.push(v);
}

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cabaran biasa yang dihadapi oleh algoritma pembelajaran mesin dalam C++ termasuk pengurusan memori, multi-threading, pengoptimuman prestasi dan kebolehselenggaraan. Penyelesaian termasuk menggunakan penunjuk pintar, perpustakaan benang moden, arahan SIMD dan perpustakaan pihak ketiga, serta mengikuti garis panduan gaya pengekodan dan menggunakan alat automasi. Kes praktikal menunjukkan cara menggunakan perpustakaan Eigen untuk melaksanakan algoritma regresi linear, mengurus memori dengan berkesan dan menggunakan operasi matriks berprestasi tinggi.

Lapisan bawah fungsi C++ sort menggunakan isihan gabungan, kerumitannya ialah O(nlogn), dan menyediakan pilihan algoritma pengisihan yang berbeza, termasuk isihan pantas, isihan timbunan dan isihan stabil.

01Garis prospek Pada masa ini, sukar untuk mencapai keseimbangan yang sesuai antara kecekapan pengesanan dan hasil pengesanan. Kami telah membangunkan algoritma YOLOv5 yang dipertingkatkan untuk pengesanan sasaran dalam imej penderiaan jauh optik resolusi tinggi, menggunakan piramid ciri berbilang lapisan, strategi kepala pengesanan berbilang dan modul perhatian hibrid untuk meningkatkan kesan rangkaian pengesanan sasaran dalam imej penderiaan jauh optik. Menurut set data SIMD, peta algoritma baharu adalah 2.2% lebih baik daripada YOLOv5 dan 8.48% lebih baik daripada YOLOX, mencapai keseimbangan yang lebih baik antara hasil pengesanan dan kelajuan. 02 Latar Belakang & Motivasi Dengan perkembangan pesat teknologi penderiaan jauh, imej penderiaan jauh optik resolusi tinggi telah digunakan untuk menggambarkan banyak objek di permukaan bumi, termasuk pesawat, kereta, bangunan, dll. Pengesanan objek dalam tafsiran imej penderiaan jauh

Apabila menggunakan struktur data kompleks dalam Java, Comparator digunakan untuk menyediakan mekanisme perbandingan yang fleksibel. Langkah-langkah khusus termasuk: mentakrifkan kelas pembanding, menulis semula kaedah bandingkan untuk menentukan logik perbandingan. Buat contoh pembanding. Gunakan kaedah Collections.sort, menghantar contoh koleksi dan pembanding.

1. Latar Belakang Pembinaan 58 Portrait Platform Pertama sekali, saya ingin berkongsi dengan anda latar belakang pembinaan 58 Portrait Platform. 1. Pemikiran tradisional platform pemprofilan tradisional tidak lagi mencukupi Membina platform pemprofilan pengguna bergantung pada keupayaan pemodelan gudang data untuk menyepadukan data daripada pelbagai barisan perniagaan untuk membina potret pengguna yang tepat untuk memahami tingkah laku, minat pengguna dan keperluan, dan menyediakan keupayaan sampingan, akhirnya, ia juga perlu mempunyai keupayaan platform data untuk menyimpan, bertanya dan berkongsi data profil pengguna dan menyediakan perkhidmatan profil dengan cekap. Perbezaan utama antara platform pemprofilan perniagaan binaan sendiri dan platform pemprofilan pejabat pertengahan ialah platform pemprofilan binaan sendiri menyediakan satu barisan perniagaan dan boleh disesuaikan atas permintaan platform pertengahan pejabat berkhidmat berbilang barisan perniagaan, mempunyai kompleks pemodelan, dan menyediakan lebih banyak keupayaan umum. 2.58 Potret pengguna latar belakang pembinaan potret di platform tengah 58

Struktur data dan algoritma ialah asas pembangunan Java Artikel ini meneroka secara mendalam struktur data utama (seperti tatasusunan, senarai terpaut, pepohon, dll.) dan algoritma (seperti pengisihan, carian, algoritma graf, dll.) dalam Java. Struktur ini diilustrasikan dengan contoh praktikal, termasuk menggunakan tatasusunan untuk menyimpan skor, senarai terpaut untuk mengurus senarai beli-belah, tindanan untuk melaksanakan rekursi, baris gilir untuk menyegerakkan benang, dan pepohon dan jadual cincang untuk carian dan pengesahan pantas. Memahami konsep ini membolehkan anda menulis kod Java yang cekap dan boleh diselenggara.

Pokok AVL ialah pokok carian binari seimbang yang memastikan operasi data yang pantas dan cekap. Untuk mencapai keseimbangan, ia melakukan operasi belok kiri dan kanan, melaraskan subpokok yang melanggar keseimbangan. Pokok AVL menggunakan pengimbangan ketinggian untuk memastikan ketinggian pokok sentiasa kecil berbanding bilangan nod, dengan itu mencapai kerumitan masa logaritma (O(logn)) operasi carian dan mengekalkan kecekapan struktur data walaupun pada set data yang besar.

Pengarang |. Disemak oleh Wang Hao |. Sekitar tahun 2010, aplikasi berita asing yang popular termasuk Zite dan Flipboard, manakala aplikasi berita tempatan yang popular adalah empat portal utama. Dengan populariti produk cadangan berita era baharu yang diwakili oleh Toutiao, apl berita telah memasuki era baharu. Bagi syarikat teknologi, tidak kira yang mana satu mereka, selagi mereka menguasai teknologi algoritma pengesyoran berita yang canggih, mereka pada dasarnya akan mempunyai inisiatif dan suara di peringkat teknikal. Hari ini, mari kita lihat kertas Anugerah Pencalonan Kertas Panjang Terbaik RecSys2023—GoingBeyondLocal:GlobalGraph-EnhancedP
