Membangun Path dengan k=2

3.4.3. Membangun Filter Predikat

Filter predikat digunakan untuk menyaring arah perluasan path. Pada penelitian ini perluasan path dibatasi hingga memenuhi syarat umum sebuah node hanya muncul sekali dalam satu path. Sebuah path terdiri dari serangkaian node. Jika path terdiri dari dua node maka path tersebut hanya memiliki first_node dan last_node. Jika jumlah node dalam path lebih dari dua node maka dalam path tersebut terdapat sebuah node sebelum last node before_last_node. Ketika sebuah path diperluas, maka filter predikat akan menyaring node baru mana yang akan ditambahkan ke dalam path. Ilustrasi proses perluasan path disajikan pada Gambar 41. Gambar 41. Perluasan Path Filter predikat yang dibangun pada penelitian ini adalah filter predikat arah direction predicate filter mencakup starlike dan variable_starlike filter. Filter verticalhorizontal variable starlike tidak dikembangkan karena diasumsikan bobot perluasan path memiliki kecenderungan yang sama ke seluruh arah. Dalam setiap filter predikat arah, arah path sebelum diperluas exact_direction_previous akan dibandingkan dengan arah path baru jika diperluas exact_direction_new. Yang menjadi pembeda dari kedua filter predikat arah di atas adalah bagaimana menetapkan node acuan dalam mencari exact_direction_previous serta exact_direction_new. Filter predikat arah starlike menggunakan node terakhir last_node dan before_last_node sedangkan variable starlike menggunakan node pertama. First Node Last Node Before Last Node New Node ? ? fi lte r Path Extended Path Berikut potongan program filter predikat arah : switch filter case starlike [jarak_new, exact_direction_new] = sdm_read_topology_dbdb,lastnode,newnode; [jarak_last, exact_direction_previous] = sdm_read_topology_dbdb,before_lastnode,lastnode; absolute exact direction if strcmp exact_direction_new , exact_direction_previous;, tf=1; else if strcmpexact_direction_previous, timur strcmpexact_direction_new, tenggara | strcmpexact_direction_new, timurlaut , tf=1; elseif strcmpexact_direction_previous, barat strcmpexact_direction_new, baratdaya | strcmpexact_direction_new, baratlaut , tf=1; elseif strcmpexact_direction_previous, selatan strcmpexact_direction_new, tenggara | strcmpexact_direction_new , baratdaya , tf=1; elseif strcmpexact_direction_previous, utara strcmpexact_direction_new, baratlaut | strcmpexact_direction_new , timurlaut , tf=1; else tf=0; end end if end end if strcmp case variable_starlike [jarak_new, exact_direction_new] = sdm_read_topology_dbdb,firstnode,newnode; [jarak_last, exact_direction_previous] = sdm_read_topology_dbdb,firstnode,lastnode; if strcmp exact_direction_new , exact_direction_previous;, tf=1; else reli is special relation of rel1 if strcmpexact_direction_new , tenggara strcmpexact_direction_previous, timur |strcmpexact_direction_previous, selatan ; tf=1; elseif strcmpexact_direction_new , baratdaya strcmpexact_direction_previous, barat |strcmpexact_direction_previous, selatan ; tf=1; elseif strcmpexact_direction_new , baratlaut strcmpexact_direction_previous, barat |strcmpexact_direction_previous, utara ; tf=1; elseif strcmpexact_direction_new , timurlaut strcmpexact_direction_previous, timur |strcmpexact_direction_previous, utara ; tf=1; else tf=0; end end special relation end end check direction predicate end end switch filter if tf==1; extendedpath = [path newnode]; extending path extendedpath =[firstnode]...[before_lastnode][lastnode][newnode] counter = counter +1; pathkn{counter,1}= extendedpath; end if tf