15/03/2013

Kiểm tra một số có là luỹ thừa của 2 hay không nhanh nhất

Thông thường để muốn kiểm tra một số có là luỹ thừa của 2 hay không thì chúng ta đem số này chia cho 2 như sau:

public boolean isPowerOfTwo(int n){
	if( 0 == n|| 1 == n ) return true;
	int x = n / 2;
	int y = n%2;
	if (1 == y) return false;
	return isPowerOfTwo(x);
}
Hoặc chúng ta không cần viết đệ qui như sau:

  public boolean isPowerOfTwo(int n){
    boolean ret;        
	if( 0 == n|| 1 == n ){
    	     ret = false;       
    }else{
        int x = n / 2;
        int y = n%2;
        while ( x > 0){
        	if (1 == y) {
            ret = false;
            break;
 		};
		x = x / 2;
        y = x%2;
	}
	ret = true;
	}
   return ret;
 } 

Sau đây là cách nhanh hơn sử dụng hàm logarit:

public boolean isPowerOfTwo(int n){
	double logn2 = Math.log(n)/Math.log(2);
	int logn2i = (int) (Math.floor(logn2));
	if(logn2-logn2i==0)
		return true;
	else
	return false;
}

Tuy nhiên nếu chúng ta để ý một chút chúng ta sẽ có cách kiểm tra nhanh nhất. Các số là luỹ thừa của 2 đều có 1 chữ số 1 trong biểu diễn nhị phân của chúng. Ví dụ số
1: 000001
2: 000010
4: 000100
8: 001000
16: 010000
32:     100000
Xét số n = 32 ( 100000) và n -1 = 31 (011111) và rõ ràng n&(n-1) = 0.
Ta có giải thuật như sau:

public boolean isPowerOfTwo(int n){
	return ((n!=0) && (n&(n-1))==0);
}

Thật ngắn gọn, đơn giản phải không các bạn!

16/02/2013

Android 4.2.2 (JDQ39) changelog

Google has release Android 4.2.2 (Jelly Bean). Nexus tablets ( Nexus 7 (non-3G), Nexus 10) and Galaxy Nexus (takju) can be updated the new version OS. Some changes:

  • More secured ADB.
  • Bug fix for bluetooth audio streaming
  • Download notification now shows remaining time
  • Quick Settings:Toggle WiFi and Bluetooth on/off by a long-touch 
  • Performance enhancements
  • New notification sounds (wireless charging and low battery)
Google vừa phát hành bản nân cấp Android 4.2.2. Các smartphone Nexus 4, Galaxy Nexus và máy tính bảng Nexus 7, Nexus 10 đã có thể cập nhật bản Android 4.2.2.
Một vài điểm mới trong bản nâng cấp Android 4.2.2:
  • An toàn hơn cho cầu nối ADB.
  • Vá lỗi âm thanh bị lắp khi dùng Bluetooth và lỗi tự khởi động lại thiết bị.
  • Thông báo (Notification) tải ứng dụng trình bày thông tin về thời gian còn lại cần để tải.
  • Thiết lập nhanh (Quick Settings):Người dùng có thể chạm vào và giữ lâu (long touch) lên biểu tượng Wi-Fi và Bluetooth để thay đổi thiết lập.
  • Âm báo mới cho chức sạc không dây và cảnh báo pin sắp hết.
  • Tốc độ hiển thị và lướt ảnh trong Gallery nhanh hơn.