�j�M(Search) Show
�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�p1. �����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 ��^���� �`�Ƿj�M�k(Sequential Search)�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 } ��^���� �G���j�M�k(Binary Search)�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); ��^���� �G����j�M�k(Tree Search)�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) ��^���� �����j�M�k(Interpolation Search)�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; } ��^���� ����j�M�k(Hashing Search)�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
�Ʀ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 ��^���� |