循序搜尋演算法最好的情況是比到第一個就找到目標請問這樣的時間複雜度為何

�j�M(Search)

�j�M(Search)

�̸�ƶq�j�p

�̷j�M�ɸ�ƪ���O�_����

�`�Ƿj�M�k(Sequential Search)

�G���j�M�k(Binary Search)

�G����j�M�k(Tree Search)

�����j�M�k(Interpolation Search)

����j�M�k(Hashing Search)

������

��������k(mid-square)

���|�k(folding)

���k(Division)

�Ʀr���R�k(digital analysis)

�ѨM����(overflow handling)

�u�ʱ����k(linear probing)

�쵲��C(chaining)

���豴��(quadratic probing)

�A����(rehashing)�C

�j�M�N�O�b�@���Ƥ���X�ҭn���S�w��ơC�j�M���D�n�֤߰ʧ@���u����v�ʧ@�A���ݳz�L����~����k�P�_�O�_�M���S�w��ơC����ƶq�֮ɫܮe���A����ƶq�e�j�ɡA�p��ֳt�j�M���@���n���D�C

�@��q���ɮ׳��O�@�s���c�O�������X(�p�W�@�椸�����Z���c)�C���F�ƧǻP�j�M�A�ܤַ|�]�w�䤤�@����쬰��Ƥ����(key)�C�z�L��ȱN��ƱƦC���ǡA�٬��ƧǡC�z�L��ȧ��S�w��ơA�٬��j�M(search)�C�@���Ʒj�M���U�C�����G

�̸�ƶq�j�p

1.         �����j�M�G���j�M����Ƹ��֡A�i�������J�O���餤�A�i��j�M�ʧ@�C

2.         �~���j�M�G���j�M����Ƹ��h�A�L�k�@�����J�O����i��j�M�ʧ@�C�ݨϥΥ~�����U�O�������B�z�C

�̷j�M�ɸ�ƪ���O�_����

1.         �R�A�j�M�G�j�M�L�{���A��ƪ��椣�|�����󲧰�(�p�G�s�W�B�R���Χ�s)�C�Ҧp�G�d�\�ȥ��r��B�q��ï�C

2.         �ʺA�j�M�G�j�M�L�{���A��ƪ���|�g�`���ʡC

�@��j�M�`�����t��k���A�u�`�Ƿj�M�v�B�u�G���j�M�v�B�u�G����j�M�v�B�u����j�M�v�C

��^����

�i�w�q�j�q�Ĥ@�Ӹ�ƶ}�l���X�A�̧Ǥ@�@�P�u�ؼи�ơv�ۤ�����A������ҭn�����ΩҦ���Ƨ��M�䧹����A����k�١u�`�Ƿj�M�v�C

�i�u�I�j(1) �{���e�����g�C

(2) ��Ƥ����ƥ��Ƨ�(Sorting)�C

�i���I�j�j�M�IJv����t(��������=(N+1)/2)�A���ެO�_���ƧǡA�C���������n�q�Y�����@���C

�i�ɶ������סj

(1) �p�G��ƨS�����СA����ƴN�i�פ�A�_�h�n����Ƶ����CN����ơA�b�̮t�����p�U�A�ݧ@N������AO(N)�C

(2) �b�������p�U(���]��ƥX�{�P���G�����v�۵�)��(N+1)/2������A�ҥH�����ɶ��P�̮t�ɶ���O(N)�A�̦n��O(1)=1���C

�i�t��k�j

int sequential_search(int list[], int n, int key)

{

  int i;

  for (i = 0; i < n; i++)

    {

    if (list[i] == key)return i+1;

    //���}�C������ƬO�_������j�M������

    //�Y���ŦX���󪺸�ơA�N�Ǧ^�����

    }

    return(-1);    

    //�Y�䤣��ŦX���󪺸�ơA�N�Ǧ^ -1

}

��^����

�i�w�q�j�p�G��Ƥw���ƧǹL�A�h�i�ϥΤG���k�Ӷi��j�M�C�G���k�O�N��Ƥ����ⳡ���A�A�N��ȻP�����Ȥ���A�p��Ȭ۵��h���A�p��A��e�b�q�A�j��A���b�q�C�p���A���q����ܧ��εL��Ƭ���C

�i�u�I�j�j�M�IJv��(��������=Log2N)�C

�i���I�j(1) ��ƥ��ݨƥ��ƧǡC

(2) �ɮ׸�ƥ��ݨϬO�i�����s�����H���ɡC

�i�ɶ������סj�]���C��������|��W�@���֤@�b����ơA�]���̦h�u�ݭn����A�C

�i�t��k�j

   Searchtime = 0;                   //�j�M���ƪ�ȳ]�w��

   Middle = (int)((Low + High)/2);   //�j�M������

   do

    {

      Searchtime = Searchtime + 1;

      if (Temp[Middle] == Key)       //�����

        {

          printf("�ӼƦr�O�Ʀb�� %d �Ӷ���",Middle);

      //��ܸ�Ʀ�m

          printf("�@�@�j�M %d ��",Searchtime);

      //��ܷj�M����

         break;    //���X�j��

        }

      else if(Temp[Middle] < Key)

              Low = Middle + 1;          //���ܥ��b��

            else  High = Middle - 1;     //���ܥk�b��

      Middle = (int)((Low + High) / 2);  //���ܤ�����

    }

    while(Low <= High);

��^����

�i�w�q�j�G���ƬO���N��ƦC�إ߬��@�ʤG���j�M��A�𤤨C�`�I�Ҥ��p�󥪤l��(��)�A�]���j��k�l��(��)�A�]�N�O ���l�𪺭ȡؾ�ڭȡإk�l�𪺭ȡC

�i�u�I�j(1) ���J�P�R���ɡA�u�ݧ��ܫ��СC

(2) �G����IJv����(����`�Ǫk�P�G���k��)�C

�i���I�j(1) �����B�k����СA�ݸ��j�O����Ŷ��C

(2) ��ƥ����ƥ��ƧǡC

�i�ɶ������סj�����P�̮t�ɶ���O(N)

��^����

�i�w�q�j�����j�M�k�O�G���j�M�k����}���C�O�̷Ӹ�Ʀ�m���G�A�B�Τ����w����ƩҦb��m�A�A�H�G���k�覡�G��C�������w���������G

�i�u�I�j��Ƥ��G�����ɡA�j�M�t�׷��֡C

�i���I�j(1) �ݭp��w�������C

(2) ��ƥ����ƥ��ƧǡC

�i�ɶ������סj���M���Ƥ������ΡA�����Ө��u��Log2N�C

�i�t��k�j

    int intsrch(int A[], int find)

    {

      int low, mid, high,Searchtime;

      low = 0;

      high = MAX - 1;

      Searchtime = 0;            //�j�M���ƪ�ȳ]�w��

      while(low <= high)

      {

        mid = (high-low)* (find-A[low])/(A[high]-A[low])+ low;

        Searchtime = Searchtime + 1;   

        if(mid < low || mid > high)  return -1;

        if(find < A[mid])   high = mid - 1;

        else if(find > A[mid])

               low = mid + 1;

             else

             {

               printf("�@�@�j�M %d ��, ",Searchtime);//��ܷj�M����

               return mid;

             }

      }

      return -1;

}

��^����

�s����ƮɡA�ä��̸�ƶ��Ǧs���A�O���θ�Ƥ��Y��줧�ȥN�J�ƥ��]�p�n�����(������)�A�p���Ʀs�񤧦�m�C�o�ؤ覡������k(Hashing)�C

�i�w�q�j�N��ƫ��ӬY�S�w�k�h�ഫ������x�s��m�A���ήɬO�H������(key value)�ഫ�C

�i�u�I�j(1) �j�M�t�׳̧֡C

(2) ��Ƥ����O���ƧǡC

(3) �b�S�o�͸I��(collision)�P����(overflow)�����p�U�A�u�ݤ@���Y�iŪ���C

(4) �j�M�t�׻P��ƶq�j�p�L���C

(5) �O�K�ʰ��A�Y���������N�A�L�k���o��ơC

�i���I�j(1) ���O�Ŷ�(�]�������ư�)�A�åB�x�s�Ŷ����Q�βv��`���ɮt�C

(2) ���I�����D�A������ɰO����@�w�q�ɷ|�Y���v�T�B�z�t�צs���t�סC

(3) �{���]�p��������C

(4) �j�q��ƵL�IJv�C

(5) ���A�X�`�ǫ�����A�p�ϱa�C

�i�t��k�j�D�n�������Ƥ��p��B�I���P���쬰�Ҷq�̾ڡC�H�U²��Q�״X�������ƻP����B�z��k�C

������

�����Ƥ������W�������G

�i���Abucket�j��������x�s��ƪ���m�A�C�@��m���w�@�Ӱߤ@����}�A����}�٬�bucket address�C

�i�ѡAslot�j�C�@�Ӧ�m(��)���h�Ӹ���x�s�ϡA�C�@�x�s�Ϻ٬���(slot)�C�C�@�ѥi�H�e�Ǥ@���O���C

�i�I���Acollision�j�����P����ȸg�����ƭp���A���b�ۦP����m(bucket address)�A�٤����I���C

�i����Aoverflow�j�p���@��ȸg�����ƭp���A�۹�������m(��,bucket)�w�˺��A�N�٬�����C

��������k(mid-square)

����k�A��ȥ����A���X�����Y�Ǧ줸���@����x�s����}�C

�i�d�ҡj���]���@���k=510324�C�Y�x�s�Ŷ�(���ƥ�)��104�A�]�N�O���|���(0000~9999)�C�h������h(k)

h(k)=k2�������|���=260430584976�������|���=3058

���|�k(folding)

����k�A�O�N��Ȥ����Ƭq�A���̫�@�q�~�A��l�U�q�ҵ���(�����x�s�Ŷ��A���ƥ�)�C�M��A�N�U�q�ۥ[�A�N�i�o�ҹ�������}�C�ۥ[�覡����ءG

�i�첾���|�Ashifting folding�j�N�U�q�����ۥ[�C

�d�ҡG���123203241112205

à123,203,241,112,205à(+)à884 (hash address)

�i��ɧ��|�Afolding at the boundaries�j�N�_�Ƭq�ΰ��Ƭq�����ۥ[�C

�d�ҡG���123203241112205

à123,203,241,112,205à(������)

à123,302,241,211,205à1082(hash address)

���k(Division)

����k�B��MOD�B��A�N���X���H�Y�@�ƭ� M�A����l�Ʒ��@X����}�C�o��}����0~M-1���C�@��M��ij�ϥν�ƮĪG����(���|���]�Ʈ��h�����D)�C

h(X)= X mod M

�i�d�ҡj���]���@��ȼƦC{X}={15,29,52,100,200}�C�H����M=13�A�h��h(X)= X mod M�A�إߤ���������G

X

X mod 13

��}

������

15

0

52

29

1

52

2

15

100

3

29

200

4

5

200

6

7

8

9

100

10

11

12

�Ʀr���R�k(digital analysis)

����k�ݥ�������Ȥ����G���θԲӤ��R�A�]�p�����ơA�Ʀr���R�k����ءG

�i�ص��Ʀr���R�k�j�Q�Υص��k�A�N��ȦU��ƪ����G�������Ʀr�R���A��l�O�d�������}(hash address)�C

�i�έp�Ʀr���R�k�j�B�βέp��k���R��ȦU��ƪ����G���ΡA�D�X�����}(hash address)�C

�ѨM����(overflow handling)

�@��`����k���G�u�ʱ����k(linear probing)�B�쵲��C(chaining)�B���豴��(quadratic probing)�B�A����(rehashing)�C

�u�ʱ����k(linear probing)

�S�ٽu�ʶ}��w�}(linear open addressing)�C�N�����}���������Ŷ��A������o�ͮɡA�H�u�ʤ覡��U�@�ӪŪ��x�s�Ŷ��N��Ʀs�J�C

�i�u�I�j�e���ϥΡC

�i���I�j�����͡u�D�n�s���v���D�A�]�N�O�@�s��Ʀ��۪�hashing address�����D�A���ɶ�����|�W�[�����j�M�ɶ��C

�쵲��C(chaining)

�N�I�������(data)��췸���ư�(overflow data area)�A�åΫ��гs���C

�i�u�I�j�e���ϥΡC

�i���I�j�ݨD�����ư�(overflow data area)�A�ݨϥΫ��Ш�ơC

���豴��(quadratic probing)

����k�ﵽ�u�ʱ����k���u�D�n�s���v���D�A�i�קK�۪���ȻE�b�@�_�C��h(X)��}�o�ͷ���ɡA�U�@��������}��

(h(X)+i2) mod b �P (h(X)-i2) mod b

�䤤�A1��i��(b-1)/2�Ab���i���ܬ�4j+3��������ơC

�A����(rehashing)

�ƥ��]�p�n�@�M������ h1�Bh2�Bh3�B�K�Bhm�A������ɥ��ϥ�h1�A�Y�A�o�ͷ���h�̦��ϥ�h2�Bh3�B�K�Bhm�A�ܨS����o�ͩΨS�����ơC

��^����