1. 程式人生 > >演算法時間複雜度中O(logN)的底數是多少

演算法時間複雜度中O(logN)的底數是多少

經常在演算法書籍中看到logN的身影,那麼這個對數的底數是多少呢?

Weiss 在他的著作《資料結構與演算法分析》中曾指出:在電腦科學中,除非有特殊的說明,否則所有的對數都是以2為底的。

不過無論底數是什麼,log級別的漸進意義是一樣的。也就是說該演算法的時間複雜度的增長與處理資料多少的增長的關係是一樣的,證明如下:

我們先考慮O(logx(n))和O(logy(n)),x!=y,我們是在考慮n趨於無窮的情況。求當n趨於無窮大時logx(n)/logy(n)的極限可以發現,極限等於lny/lnx,也就是一個常數(以x為底y的對數),所以我們可以證明,底數對於O(logN)的描述沒有影響

相關推薦

演算法時間複雜O(logN)的底數是多少

經常在演算法書籍中看到logN的身影,那麼這個對數的底數是多少呢? Weiss 在他的著作《資料結構與演算法分析》中曾指出:在電腦科學中,除非有特殊的說明,否則所有的對數都是以2為底的。 不過無論底數是什麼,log級別的漸進意義是一樣的。也就是說該演算法的時

設任意n個整數存放於陣列A[1..n],試編寫演算法,將所有正數排在所有負數前面(要求:演算法時間複雜O(n))。

注意陣列的實際長度 #include <iostream> using namespace std; void sort(int A[],int n) { int i=0;//陣列的頭下標 int j,x; j=n-1;//陣列的尾下標 while

刪除連結串列的某個數,演算法時間複雜O(n)

import java.util.Scanner; /** * */ /** * @author jueying: * @version 建立時間:2018-10-29 下午04:05:03 * 類說明 */ /** * @author jueying

在一個含有空格字元的字串加入XXX,演算法時間複雜O(N)

import java.util.Scanner; /** * */ /** * @author jueying: * @version 建立時間:2018-10-18 下午10:54:54 * 類說明 */ /** * @author jueying

時間複雜O(log n) Log的底數是多少

其實這裡的底數對於研究程式執行效率不重要,寫程式碼時要考慮的是資料規模n對程式執行效率的影響,常數部分則忽略,同樣的,如果不同時間複雜度的倍數關係為常數,那也可以近似認為兩者為同一量級的時間複雜度。 現在來看看為什麼底數具體為多少不重要? 讀者只需要掌握(依稀記得)中學數學

為什麼演算法漸進複雜對數的底數總為2

在分析各種演算法時,經常看到O(log2n)O(log2⁡n)或O(nlog2n)O(nlog2⁡n)這樣的漸進複雜度。不知有沒有同學困惑過,為什麼演算法的漸進複雜度中的對數都是以2為底?為什麼沒有見過O(nlog3n)O(nlog3⁡n)這樣的漸進複雜度?本文解釋這個問

演算法時間複雜概括——o(1)、o(n)、o(logn)、o(nlogn)

在描述演算法複雜度時,經常用到o(1), o(n), o(logn), o(nlogn)來表示對應演算法的時間複雜度。這裡進行歸納一下它們代表的含義:這是演算法的時空複雜度的表示。不僅僅用於表示時間複雜度,也用於表示空間複雜度。   O後面的括號中有一個函式,指明某個演算法的

【轉】演算法時間複雜概括——o(1)、o(n)、o(logn)、o(nlogn)

       在描述演算法複雜度時,經常用到o(1), o(n), o(logn), o(

已知長度為n的線性表A採用順序儲存結構,請寫一個時間複雜O(n)、空間複雜O(1)的演算法,該演算法可刪除線性表所有值為item的資料元素。

語言:C++ #include <iostream> using namespace std; typedef int ElemType; //定義 #define MAXSIZE 100 typedef struct {ElemType *elem; int length;}Sq

詳細告訴你為什麼它、它、它的時間複雜O(1)、O(n)、O(logn)、O(n^2),演算法時間複雜理解

時間複雜度是一個理解比較難的問題,網上有很多講解,但都不詳細,一般都是舉個例子,然後告訴你,這個的時間複雜度是多少多少。例如告訴你氣泡排序的時間複雜度是O(n^2),然後就沒然後了。這可難壞了初學不懂時間複雜度的人。喂!我可不是要知道這個例子的時間複雜度到底多少,我是想知道它的時間複雜度為什

時間複雜O(N*logN)的常用排序演算法總結與Java實現

時間複雜度為O(N*logN)的常用排序演算法主要有四個——快速排序、歸併排序、堆排序、希爾排序1.快速排序·基本思想    隨機的在待排序陣列arr中選取一個元素作為標記記為arr[index](有時也直接選擇起始位置),然後在arr中從後至前以下標j尋找比arr[inde

長度為n的順序表L,編寫一個時間複雜O(n),空間複雜O(1)的演算法,該演算法刪除線性表所有值為X的元素

解法:用K記錄順序表L中不等於X的元素個數,邊掃描L邊統計K,並將不等於X的元素向前放置K位置上,最後修改L長度 void  del_x_1(SqList &L,Elemtype x){ int k=0; for(i=0;i<L.length;i++) {

尋找陣列第k小的數:平均情況下時間複雜O(n)的快速選擇演算法

又叫線性選擇演算法,這是一種平均情況下時間複雜度為O(n)的快速選擇演算法,用到的是快速排序中的第一步,將第一個數作為中樞,使大於它的所有數放到它右邊,小於它的所有數放到它左邊。之後比較該中樞的最後位

Algorithm 04 : 尋找兩個有序陣列的第N個數,要求時間複雜O(logm+logn)

Question : Give a divide and conquer algorithm for the following problem : you are given two sorted lists of size m and n

棧表獲取最小值,時間複雜O(1)

       近期複習資料結構,看到網上有一道演算法題,該題目曾經是google的一道面試題,國內的網際網路公司也紛紛效仿。我也順便複習之。        題目內容為:對現在的stack(棧)資料結構進行改進,加一個

時間複雜O(n)的排序演算法

我們常用的幾種排序演算法,氣泡排序,選擇排序,它們已經是相對比較簡單,穩定的排序演算法了,但是它們時間複雜度為O(n*n),基本都要用到兩層迴圈,今天我就像大家介紹一種簡單,只用一層for迴圈,時間複雜度為O(n)的排序演算法。 樣例輸入:1 4 5 6 3 4 2 8 9 1 樣例輸出

時間複雜——大O演算法

演算法的執行效率,就是演算法程式碼的執行時間。我們需要能夠用肉眼就看出一段程式碼的執行時間。 int cal(int n){ int sum = 0; int i = 1; for(; i<=n; ++i){ sum=sum+1; } return sum;

實現排序演算法時間複雜O(n)

我們常用的排序氣泡排序 O(n^2); 快速排序O(nlogn);堆排序O(nlogn);選擇排序O(n^2); 我們常用的排序都不符合時間複雜度的要求; 經常聽說一個說法  用空間代替時間 現在要排序的陣列為陣列 a;例如a數組裡面有  1,1,2,2,3,3,2,2,5

一個時間複雜O(n)的排序演算法,空間複雜O(1)

package test; import java.util.HashSet; import java.util.Set; public class Test { public st