1.1.10 从二分查找BinarySearch开启算法学习之路---《java算法第四版》
生活随笔
收集整理的這篇文章主要介紹了
1.1.10 从二分查找BinarySearch开启算法学习之路---《java算法第四版》
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 0.前言
- 1.功能
- 2.示例
- 有兩個名單tinyW.txt和tinyT.txt,將tinyT.txt名單中不在tinyW.txt的數據打印出來
- ① 實現原理
- ② 實現代碼
- ③ 性能分析
0.前言
- 最近才開始學算法,學習的材料是《算法 第四版》java語言描述,我會在接下來的學習中運用以下步驟學習記錄,望廣大讀者朋友能夠喜歡,也請多多提提意見。
- 首先我會說明這個算法提供了什么功能,拿來干嘛的,然后我會列幾個例子來加深對這種算法的理解和應用,每個例子我都會進行實現原理的描述,有圖有真相,還有它的代碼,代碼也會有注釋分析,最后性能分析
- 最近才剛學,所以后期我還會寫性能分析,實際應用等,將書中的精華都總結下來,同時后期我也會刷題leetcode,將刷到的題目分類,會重新加入到各篇文章的例子中,初步估計會是以鏈接的方式載入。
1.功能
- 其實功能不必說什么,名字已經能說明一切,就是查找功能,從海量的數據中查找你想要的數據。
2.示例
有兩個名單tinyW.txt和tinyT.txt,將tinyT.txt名單中不在tinyW.txt的數據打印出來
① 實現原理
- 算法是由靜態方法rank()實現的,它接受一個整數鍵key和一個已經有序的int數組作為參數。 如果該鍵存在于數組中則返回它的索引,否則返回-1。
- 算法使用兩個變量1o和hi,并保證如果鍵在數組中則它一定在a[lo…hi]中,然后方法進入一個循環,不斷將數組的中間鍵(索引為mid)和被查找的鍵比較。
- 如果被查找的鍵等于a[mid],返回mid;否則算法就將查找范圍縮小一半,如果被查找的鍵小于a[mid]就繼續在左半邊查找,如果被查找的鍵大于a[mid]就繼續在右半邊查找。算法找到被查找的鍵或是查找范圍為空時該過程結束。
- 實現圖解:
② 實現代碼
package Chapter1.Section11.cs1110;import edu.princeton.cs.algs4.In; import edu.princeton.cs.algs4.StdIn; import edu.princeton.cs.algs4.StdOut;import java.util.Arrays;public class BinarySearch {/*** This class should not be instantiated.*/private BinarySearch() {}// 查詢key是否在數組a中,在就返回mid索引,不在就返回-1.public static int indexOf(int[] a, int key) {int lo = 0;int hi = a.length - 1;while (lo <= hi) {int mid = lo + (hi - lo) / 2;if (key < a[mid]) hi = mid - 1;else if (key > a[mid]) lo = mid + 1;else return mid;}return -1;}//個人感覺沒有必要,這里只是傳遞了一下,不知道作者是怎么想的public static int rank(int key, int[] a) {return indexOf(a, key);}public static void main(String[] args) {// 從文件中讀取數據In in = new In(args[0]);//這里有幾個打印語句,我就是好奇想知道它存的是啥System.out.println("in:" + in.toString());System.out.println("in對象的內容:" + Arrays.toString(args));int[] whitelist = in.readAllInts();System.out.println("whitelist:" + whitelist.toString());System.out.println("whitelist數組未排序:" + Arrays.toString(whitelist));//排序數組Arrays.sort(whitelist);System.out.println("whitelist數組已排序:" + Arrays.toString(whitelist));// read integer key from standard input; print if not in whitelistwhile (!StdIn.isEmpty()) {int key = StdIn.readInt();//這里只是想看一下key是什么。標準輸入的數據是啥System.out.print(key + ",");if (rank(key, whitelist) == -1)//這里我改了一下,*x*即為tinyT.txt中不再tinyW.txt中的數據StdOut.print("*" + key + "*,");}} }③ 性能分析
- 二分查找快是因為它只需檢查很少幾個條目(相對于數組的大小)就能夠找到目標元素( 或者確認目標元素不存在)。
- 這里先簡單描述一下,性能分析還沒學,后期補充進來
參考:《java算法第四版》
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的1.1.10 从二分查找BinarySearch开启算法学习之路---《java算法第四版》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.4.1 算术逻辑单元ALU与加法器(
- 下一篇: 6.3 FTP协议