Recent Posts

PHP: Hàm trả về vị trí xuất hiện của chuỗi s1 trong chuỗi s2

-

<?php 
/*  This  function  returns  the  position  of  string  s1  within  string  s2. 
      The  position  is  1  based.    If  s1  is  not  in  s2,  0  is  returned. 
*/ 
function  InStr($s1,  $s2) 

        //Check  for  valid  input 
        if(!(is_string($s1)  &&  is_string($s2)))  return  0; 

        $s1len  =  strlen($s1); 
        $s2len  =  strlen($s2); 

        //Check  if  s1  in  s2  at  all 
        if(!ereg($s1,  $s2))  return  0; 

        //Resolve  simple  case 
        if($s1  ==  $s2)  return  1; 

        //Set  initial  search  limits 
        $begin  =  0; 
        $end  =  $s2len  -  $s1len; 

        //Initialize  position 
        $position  =  0; 

        //Do  binary  search  of  s2  for  s1 
        //Check  left  side  first  to  find  first  occurance  of  s1 
        //Check  right  side  first  to  find  last  occurance  of  s1 
        while($end  >  $begin  +  1) 
        { 
                $middle  =  ceil(($begin  +  $end)  /  2); 
                $leftBegin  =  $begin; 
                $rightBegin  =  $middle  +  $s1len; 
                $leftEnd  =  $middle; 
                $rightEnd  =  $end  +  $s1len; 

                //Check  left  first 
                if(ereg($s1,  substr($s2,  $leftBegin,  $rightBegin  -  $leftBegin))) 
                { 
                        $end  =  $middle; 
                } 
                else  //(ereg($s1,  substr($s2,  $leftEnd,  $rightEnd  -  $leftEnd))) 
                { 
                        $position  +=  $middle  -  $begin; 
                        $begin  =  $middle; 
                } 
        } 

        //Resolve  1  off  problems  introduced  by  ceil 
        if(ereg($s1,  substr($s2,  $end,  $s1len)))  $position++; 

        //Return  position  1  based 
        return  $position  +  1; 

?>

Related Post:

  • Code C/C++: Thuật toán sắp xếp vun đống (Heap Sort)Ý tưởng thuật toán:Ta xem danh sách n phần tử a0, a1, …,an-1  là cây nhị phân. Cây nhị phân này được xác định như sau: tại nút thứ i tương ứng với chỉ số thứ i của mảng có con trái là nút 2*(i+1)-1 và con phải 2*(i+1) nếu 2*(i+1)-1 và 2*(i+1) nhỏ hơn n.Thuật toán được mô tả như sau:- Xây dựng Heap sao cho với mọi nút cha đều có g… Read More
  • Code C/C++: Thuật toán sắp xếp trộn (Merge Sort)Mô tả bài toán: cho 2 danh sách A và B lần lượt có m và n phần tử đã sắp xếp theo thứ tự. Bài toán đặt ra trộn 2 danh sách A và B  với nhau thành danh sách C cũng là một danh sách có thứ tự.Thuật toán:Bước 1 :khởi tạo ba chỉ số chạy trong vòng lặp i = 0, j = 0, k = 0 tương  ứng cho ba mảng A, B và C.Bước 2: tại mỗi bước nếu cả hai chỉ số (i<m và… Read More
  • Code C/C++: Thuật toán sắp xếp nhanh (QuickSort)Ý tưởng thuật toán: xét dãy n phần tử a0, a1, …,an-1Bước 1: Chọn khóa pivot = a(left+right)/2Bước 2: Phân vùng. Những phần tử nhỏ hơn khóa thì nằm bên trái của khóa, những phần tử lớn hơn khóa thì nằm bên phải của khóa và những phần tử bằng khóa có thể nằm bất cứ chỗ nào trên dãy.Bước 3: Sắp xếp cho cả hai phân vùng mới bên trái và bên ph… Read More
  • Code C/C++: Thuật toán sắp xếp chèn (Insertion Sort)Ý tưởng thuật toán: xét dãy n phần tử a0, a1, …,an-1- Xem dãy gồm 1 phần tử là a0 dãy có thứ tự.- Thêm a1 vào dãy có thứ tự a0 sao cho dãy mới a0, a1 là dãy có thứ tự. Nếu a1 < a0  ta hoán vị a1 với a0.- Thêm a2  vào dãy có thứ tự a0, a1 sao cho dãy mới a0,… Read More
  • Code C/C++: Thuật toán sắp xếp nổi bọt (Bubble Sort Algorithm)Ý tưởng thuật toán: xuất phát từ phần tử cuối danh sách ta tiến hành so sánh với phần tử bên trái của nó. Nếu phần tử đang xét có khóa nhỏ hơn phần tử bên trái của nó ta tiến đưa nó về bên trái của dãy bằng cách hoán vị với phần tử bên trái của nó. Tiếp tục thực hiện như thế đối với bài toán có n phần tử thì sau n –1 bước ta thu được danh sách tăng dần. Ví dụ: … Read More
  • Code C/C++: Thuật toán sắp xếp lựa chọn (Selection Sort)Ý tưởng thuật toán: xét dãy n phần tử a0, a1, …,an-1- Chọn trong dãy a0, a1, …,an-1 ra phần tử có khóa nhỏ nhất và hoán vị nó với a0.- Chọn trong dãy a1, a2, …,an-1 ra phần tử có khóa nhỏ nhất và hoán vị nó với a1.- Cứ tiếp tục như thế sau n –1 bước ta thu được danh sách có thứ tự.Ví dụ:Sau 9 bước lặp ta thu được dãy đã được sắp… Read More




Klik untuk melihat kode: :) =( :s :D :-D ^:D ^o^ 7:( :Q :p T_T @@, :-a :W *fck* x@