Rumah >pembangunan bahagian belakang >Tutorial Python >Isih Algoritma || Python || Struktur Data dan Algoritma
Isih Algoritma
Dalam hal ini, kita menukar elemen yang lebih tinggi dengan jirannya sehingga kita mencapai penghujung tatasusunan. Kini elemen tertinggi berada pada kedudukan terakhir. Jadi, kami menukar sempadan dan mengurangkannya sebanyak 1 daripada yang terakhir. Paling teruk, kita perlu mengulangi n kali untuk mengisih tatasusunan.
def bubble_sort(arr): n = len(arr) for i in range(n): swapped = False # Last i elements are already in place, so we don't need to check them for j in range(0, n-i-1): # Swap if the element found is greater than the next element if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] # Swap the elements swapped = True if not swapped: break return arr
Algoritma -
Kerumitan Masa :
Kerumitan Angkasa - O(1), Tiada memori tambahan diperlukan.
Kelebihan -
Tiada memori tambahan diperlukan.
Stabil kerana unsur mengekalkan susunan relatifnya.
Kelemahan -
Aplikasi-
Dalam hal ini, kami mencari elemen terkecil dalam tatasusunan dan menggantikannya dengan elemen pertama. Kemudian, kita tambahkan sempadan sebanyak 1 dan ulangi langkah yang sama sehingga kita sampai ke penghujung tatasusunan.
def selectionSort(a): i = 0 while i<len(a): smallest = min(a[i:]) index_of_smallest = a.index(smallest) a[i],a[index_of_smallest] = a[index_of_smallest],a[i] i=i+1 return a
Algoritma -
Lelaran pada tatasusunan dan cari elemen minimum.
Tukar dengan elemen pertama dan tambahkan penunjuk sebanyak 1.
Ulang proses ini sehingga kita sampai ke penghujung tatasusunan.
Kerumitan Masa : Ia mempunyai kerumitan masa O(n2) dalam ketiga-tiga kes: terbaik, purata dan paling teruk. Ini kerana kita perlu memilih elemen minimum dan tukarkannya setiap kali, tidak kira sama ada tatasusunan sudah diisih atau tidak.
Kerumitan Angkasa - O(1), Tiada memori tambahan diperlukan.
Kelebihan -
Tiada memori tambahan diperlukan.
Lebih sedikit pertukaran dilakukan berbanding dengan jenis gelembung.
Kelemahan -
Kerumitan masa - O(n2), yang sangat tinggi untuk set data yang besar.
Tidak Stabil, kerana ia tidak mengekalkan susunan relatif unsur yang sama.
Aplikasi -
Ia boleh digunakan dalam sistem dengan memori terhad kerana ia tidak memerlukan storan tambahan.
Ia digunakan dalam sistem yang meminimumkan bilangan swap adalah kritikal, seperti dalam sistem dengan operasi tulis perlahan.
Ia ialah algoritma yang berfungsi dengan memasukkan elemen yang tidak diisih ke dalam kedudukan yang betul dengan menyemak secara berulang ke belakang dari kedudukan elemen ke permulaan tatasusunan.
def bubble_sort(arr): n = len(arr) for i in range(n): swapped = False # Last i elements are already in place, so we don't need to check them for j in range(0, n-i-1): # Swap if the element found is greater than the next element if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] # Swap the elements swapped = True if not swapped: break return arr
Algoritma -
Mulakan dari elemen kedua tatasusunan dan bandingkan dengan elemen pertama. Jika elemen semasa lebih kecil daripada elemen pertama, maka tukar elemen tersebut.
Sekarang tingkatkan penunjuk dan lakukan ini untuk elemen ketiga: bandingkan dengan elemen kedua dan pertama.
Ulang proses yang sama untuk elemen yang lain, bandingkan dengan semua elemen sebelumnya dan masukkannya pada kedudukan yang sesuai.
Kerumitan Masa :
- Kes Terbaik - Jika tatasusunan sudah diisih maka hanya satu lelaran diperlukan. Kerumitan masa ialah O(n)
- Kes Purata - jika tatasusunan diisih secara rawak, maka kerumitan masa ialah O(n2)
- Kes Terburuk - jika tatasusunan berada dalam susunan menurun maka kami akan memerlukan n2 lelaran.
Kerumitan Angkasa - O(1), Tiada memori tambahan diperlukan.
Kelebihan -
Kelemahan -
Kerumitan masa - O(n2), yang sangat tinggi untuk set data yang besar.
Tidak Stabil, kerana ia tidak mengekalkan susunan relatif unsur yang sama.
Aplikasi-
Merge Sort ialah algoritma yang mengikut pendekatan bahagi dan takluk. Ia mempunyai dua langkah utama: pertama, membahagi tatasusunan secara rekursif dan kedua, menggabungkan tatasusunan yang dibahagikan mengikut tertib diisih.
def selectionSort(a): i = 0 while i<len(a): smallest = min(a[i:]) index_of_smallest = a.index(smallest) a[i],a[index_of_smallest] = a[index_of_smallest],a[i] i=i+1 return a
Algoritma -
Bahagikan tatasusunan kepada dua bahagian dengan mengira titik tengah.
Teruskan membahagi sehingga panjang setiap sub-tatasusunan ialah 1.
Panggil fungsi cantum pada kedua-dua bahagian: separuh kiri dan separuh kanan.
Gunakan tiga penunjuk untuk proses penggabungan:
Lelar melalui kedua-dua bahagian dan bandingkan elemennya. Masukkan elemen yang lebih kecil ke dalam tatasusunan yang diisih dan naikkan penunjuk yang sepadan sebanyak 1.
Ulang proses ini secara rekursif sehingga keseluruhan tatasusunan diisih.
Kerumitan Masa : Isih Gabungan mempunyai kerumitan masa O(n log n) dalam ketiga-tiga kes: terbaik, purata dan paling teruk. Ini kerana, tidak kira sama ada tatasusunan sudah diisih atau tidak, langkah yang sama diikuti untuk setiap bahagian dan bergabung.
O( log n ) - Saiz tatasusunan dibahagi separuh pada setiap langkah semasa fasa bahagi.
O(n) - Semasa proses penggabungan kita perlu mengulangi semua elemen sekali.
Jadi jumlah kerumitan masa ialah O (n) * O (log n) = O (n log n)
Kerumitan Ruang - O(n), Memori tambahan diperlukan semasa proses penggabungan untuk menyimpan tatasusunan sementara.
Kelebihan -
Stabil, kerana unsur mengekalkan susunan relatifnya.
Kerumitan masa ialah O (n log n), walaupun untuk set data yang besar.
Sesuai untuk pemprosesan selari kerana sub-tatasusunan digabungkan secara bebas.
Kelemahan -
Aplikasi -
Isih Pantas ialah algoritma yang mengikut pendekatan divide-and-conquer. Kami memilih elemen pangsi dan membahagikan tatasusunan di sekeliling elemen pangsi selepas meletakkan pangsi dalam kedudukan diisih yang betul.
Langkah pertama ialah memilih elemen pangsi dan kemudian membahagikan tatasusunan di sekeliling pangsi. Semua elemen yang lebih kecil daripada pangsi akan berada di sebelah kiri, dan semua elemen yang lebih besar daripada pangsi akan berada di sebelah kanannya. Pivot kemudiannya berada dalam kedudukan diisih yang betul. Secara rekursif, proses yang sama digunakan dengan membahagikan tatasusunan kepada dua bahagian: separuh pertama mengandungi elemen sebelum pangsi, dan separuh kedua mengandungi elemen selepas pangsi. Proses ini diulang sehingga panjang setiap sub-tatasusunan mencapai 1.
def bubble_sort(arr): n = len(arr) for i in range(n): swapped = False # Last i elements are already in place, so we don't need to check them for j in range(0, n-i-1): # Swap if the element found is greater than the next element if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] # Swap the elements swapped = True if not swapped: break return arr
Algoritma -
Kerumitan Masa :
1. Kes Terbaik - Kerumitan masa - O(n log n), apabila pangsi membahagi tatasusunan kepada dua bahagian yang sama.
2. Kes Purata - Kerumitan masa - O(n log n), apabila pangsi membahagi tatasusunan kepada dua bahagian yang sama. Tetapi tidak semestinya sama.
3. Kes terburuk - Kerumitan masa - O(n2) , Bila -
Elemen terkecil dipilih sebagai pangsi dalam tatasusunan yang telah diisih.
Elemen terbesar dipilih sebagai pangsi dalam tatasusunan yang diisih dalam tertib menurun.
O( log n ) - Saiz tatasusunan dibahagi separuh pada setiap langkah semasa fasa bahagi.
O(n) - Semasa menyusun elemen.
Jadi, jumlah kerumitan masa ialah O (n) * O (log n) = O (n log n)
Kerumitan Angkasa Lepas :
Kes Terbaik dan Purata - O( log n) - untuk tindanan rekursif.
Kes Terburuk - O(n) - untuk tindanan rekursif.
Kelebihan -
Kelemahan -
Aplikasi -
Isih Timbunan ialah algoritma pengisihan berasaskan perbandingan. Ia adalah lanjutan daripada Isih Pemilihan. Dalam Heap Sort, kami mencipta Binary Heap dan menukar elemen maksimum atau minimum dengan elemen terakhir. Kemudian, kita kurangkan saiz timbunan sebanyak 1. Proses ini diulang sehingga panjang timbunan lebih besar daripada 1.
def bubble_sort(arr): n = len(arr) for i in range(n): swapped = False # Last i elements are already in place, so we don't need to check them for j in range(0, n-i-1): # Swap if the element found is greater than the next element if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] # Swap the elements swapped = True if not swapped: break return arr
Algoritma -
a.Anak kirinya berada di indeks 2i 1
b. Anak kanannya berada di indeks 2i 2
Kerumitan Masa : Isih Timbunan mempunyai kerumitan masa O(n log n) dalam ketiga-tiga kes: terbaik, purata dan paling teruk. Ini kerana, tidak kira sama ada tatasusunan sudah diisih atau tidak, langkah yang sama diikuti setiap kali timbunan maksimum dibuat dan elemen ditukar.
O( log n ) - Untuk mencipta timbunan maks
O(n) - Apabila timbunan maks dibuat dan elemen ditukar n kali.
Jadi jumlah kerumitan masa ialah O (n) * O (log n) = O (n log n)
Kerumitan Ruang : Untuk semua kes - O( log n) - untuk timbunan rekursif.
Kelebihan -
Kelemahan -
Aplikasi -
Isih Mengira ialah algoritma pengisihan bukan berasaskan perbandingan. Ia amat cekap apabila julat nilai input adalah kecil berbanding dengan bilangan elemen yang akan diisih. Idea asas di sebalik Pengisihan Pengiraan ialah mengira kekerapan setiap elemen yang berbeza dalam tatasusunan input dan menggunakan maklumat tersebut untuk meletakkan elemen dalam kedudukan yang disusun dengan betul.
Radix Sort menggunakan Counting Sort sebagai subrutin. Ia menggunakan Isih Mengira pada setiap tempat digit nombor dan mengisih berulang kali sehingga ia memproses semua digit nombor terbesar dalam tatasusunan.
def bubble_sort(arr): n = len(arr) for i in range(n): swapped = False # Last i elements are already in place, so we don't need to check them for j in range(0, n-i-1): # Swap if the element found is greater than the next element if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] # Swap the elements swapped = True if not swapped: break return arr
def selectionSort(a): i = 0 while i<len(a): smallest = min(a[i:]) index_of_smallest = a.index(smallest) a[i],a[index_of_smallest] = a[index_of_smallest],a[i] i=i+1 return a
Algoritma -
Cari nombor maksimum dalam tatasusunan dan tentukan bilangan digit (d) di dalamnya. Jika panjang nombor itu ialah d, Mengira Isih dipanggil d kali pada tatasusunan.
Isih Mengira Panggilan untuk setiap tempat digit dalam tatasusunan, bermula dari tempat satu, kemudian tempat puluhan, dan seterusnya.
Dalam Pengiraan jenis:
Kerumitan Masa :
Isih Mengira mempunyai kerumitan masa O(n k), dengan n ialah bilangan elemen untuk diisih dan k ialah julat nilai (saiz tatasusunan indeks). Kerumitan ini sah untuk ketiga-tiga kes: terbaik, sederhana dan paling teruk.
Ini kerana, tidak kira sama ada tatasusunan sudah diisih atau tidak, langkah yang sama diikuti setiap kali.
Kerumitan masaRadix Sort meningkat dengan faktor d, dengan d ialah bilangan digit dalam nombor terbesar dalam tatasusunan. Kerumitan masa ialah O (d * (n k))
Jadi jumlah kerumitan masa ialah O (d) * O(n k) = O (d * (n k))
Kerumitan Ruang : Untuk semua kes - O(n k), dengan n ialah panjang tatasusunan input dan k ialah julat nilai dalam tatasusunan indeks.
Kelebihan -
Kelemahan -
Aplikasi -
Atas ialah kandungan terperinci Isih Algoritma || Python || Struktur Data dan Algoritma. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!