سلام . یه پرژه دارم گفتن با posting list بنویس
گشتم منبع فارسی نداشت
کسی میدونه چیه یکم توضیح بده (لینک لیست رو میدونم اینو نه !فک کنم یجور جست و جو در لینک لیست باشه)
Printable View
سلام . یه پرژه دارم گفتن با posting list بنویس
گشتم منبع فارسی نداشت
کسی میدونه چیه یکم توضیح بده (لینک لیست رو میدونم اینو نه !فک کنم یجور جست و جو در لینک لیست باشه)
سلام.
بازم منم :))) خب اینجا سوت و کوره هیچکی نیست!
posting list اسمش رو نمیدونستم ولی سرچ زدم متوجه شدم چیه. تو درس بازیابی اطلاعات ما بهش میگفتیم term-doc. بهش inverted index هم میگن!
کاربردی که داشت برای جستجو یک سری کلمات در انبوهی از اسناد یا متون استفاده میشد. در مقابلش doc-term هم داشتیم.
خب مفهومش اینه، ما برای هر کلمه (معمولا برای ریشه کلمات)، یک لیستی (میتونه هر نوع لیستی باشه) از id سند ها رو ذخیره میکنیم. این به ما کمک میکنه که نیاز نباشه برای جستجو هر کلمه ای تمام داکیومنت ها رو از اول بگردیم و از قبل چنین لیستی رو تهیه میکنیم.
مثلا:
"سامسونگ" -> 12,14,5323,23,4234,2342,3242
"اندروید" -> 14,43,54,65,76,867
که اعداد نشون دهنده شماره سند (پست) هستند.
اگر میخواهیم بدونیم جمله "سامسونگ با سیستم عامل اندروید" رو سرچ کنیم، خب کلمه "با" رو حذف میکنیم و فرض کنیم چهار کلمه "سامسونگ"، "سیستم"، "عامل" و "اندروید" داریم. خب اگر اشتراک posting list این چهار کلمه رو محاسبه کنیم، لیستی بدست میاد که حاوی هر چهار کلمه است.
مفهوم posting list همینه و چیز بیشتری نیست.
فقط اون کد بازی 8پازل رو هم نوشتم - کپی پیست کنید نظرتونو بگید . مهمه برام .
package Two;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Array;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Queue;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import javax.naming.SizeLimitExceededException;
import javax.swing.plaf.synth.SynthScrollPaneUI;
public class BinarySearchTree {
public static Node root;
public BinarySearchTree(){
this.root = null;
}
public static int cout = 0 , count1 = 0;
public boolean find(String id){
Node current = root;
while(current!=null){
if(current.data.equals(id)){
return true;
}else if(current.data.compareTo(id) > 0){
current = current.left;
}else{
current = current.right;
}
}
return false;
}
public void DO(String a){
String arr[][] = new String [3][3];
arr = toArr(a);
int zero[] = findZero(arr);
if(zero == null){
System.out.println(a + " zero nadare !!");
}
else{
toMatrixs(zero[0] , zero[1] , arr);
}
}
public void toMatrixs(int i , int j , String arr[][]){
if(j-1 >= 0){
arr[i][j] = arr[i][j-1];
arr[i][j-1] = "0";
addArr2Tree(arr);
arr[i][j-1] = arr[i][j];
arr[i][j] = "0";
}
if(j+1 <= 2){
arr[i][j] = arr[i][j+1];
arr[i][j+1] = "0";
addArr2Tree(arr);
arr[i][j+1] = arr[i][j];
arr[i][j] = "0";
}
if(i-1 >= 0){
arr[i][j] = arr[i-1][j];
arr[i-1][j] = "0";
addArr2Tree(arr);
arr[i-1][j] = arr[i][j];
arr[i][j] = "0";
}
if(i+1 <= 2){
arr[i][j] = arr[i+1][j];
arr[i+1][j] = "0";
addArr2Tree(arr);
arr[i+1][j] = arr[i][j];
arr[i][j] = "0";
}
}
public void addArr2Tree(String arr[][]){
String a = Arr2Str(arr);
if(!find(a)){
insert(a);
count1++;
}
}
public String Arr2Str(String arr[][]){
String a = "";
a += arr[0][0];
a += arr[0][1];
a += arr[0][2];
a += arr[1][0];
a += arr[1][1];
a += arr[1][2];
a += arr[2][0];
a += arr[2][1];
a += arr[2][2];
return a;
}
public int[] findZero(String arr[][]){
int result[] = new int [2] ;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if(arr[i][j].equals("0"))
{
result[0] = i;
result[1] = j;
return result ;
}
}
}
return null;
}
public String [][] toArr(String a){
String arr [][]= new String [3][3];
arr[0][0] = a.charAt(0)+"";
arr[0][1] = a.charAt(1)+"";
arr[0][2] = a.charAt(2)+"";
arr[1][0] = a.charAt(3)+"";
arr[1][1] = a.charAt(4)+"";
arr[1][2] = a.charAt(5)+"";
arr[2][0] = a.charAt(6)+"";
arr[2][1] = a.charAt(7)+"";
arr[2][2] = a.charAt(8)+"";
return arr;
}
public void Start(String data){
// Node current = root;
// while(current!=null){
// DO(current.data);
// if(current.data.equals("123456780")){
// System.out.println("END");
// break;
// }
// else if(current.data.compareTo(data) > 0){
// current = current.left;
// }else{
// current = current.right;
// }
// }
while(cout <1290000 && count1 < 1290000)
{
if(root == null) return;
Queue<Node> queue = new ArrayDeque<Node>();
queue.add(root);
while(!queue.isEmpty()){
Node current = queue.peek();
DO(current.data);
cout++;
if(current.data.equals("123456780")){
// System.out.println("END");
cout = count1 = 1290000000;
break;
}
if (current.left != null)
queue.add(current.left);
if (current.right != null){
queue.add(current.right);
}
queue.poll();
}
}
// System.out.println(cout +" : and : "+count1);
}
public void parent(String id){
Node current = root;
ArrayList<String> arr = new ArrayList<>();
while(current!=null){
arr.add(current.data);
if(current.data.equals(id)){
current = null;
}else if(current.data.compareTo(id) > 0){
current = current.left;
arr.add("/");
}else{
current = current.right;
arr.add("\\");
}
}
//////// FILE
String b = " ";
for (int i = 0; i < arr.size(); i++) {
if(arr.get(i) == "\\" || arr.get(i) == "/")
System.out.print("\n"+" "+arr.get(i));
else
for (int j = 0; j < arr.get(i).length(); j++) {
if(j%3 == 0)
{
System.out.println();
System.out.print(" ");
}
System.out.print("["+arr.get(i).charAt(j)+"]");
}
}
System.out.print("\n"+" Deep from root to goal : "+arr.size()/2);
}
// public boolean delete(String id){
// Node parent = root;
// Node current = root;
// boolean isLeftChild = false;
// while(current.data.compareTo(id) != 0){
// parent = current;
// if(current.data.compareTo(id) > 0){
// isLeftChild = true;
// current = current.left;
// }else{
// isLeftChild = false;
// current = current.right;
// }
// if(current ==null){
// return false;
// }
// }
// //if i am here that means we have found the node
// //Case 1: if node to be deleted has no children
// if(current.left==null && current.right==null){
// if(current==root){
// root = null;
// }
// if(isLeftChild ==true){
// parent.left = null;
// }else{
// parent.right = null;
// }
// }
// //Case 2 : if node to be deleted has only one child
// else if(current.right==null){
// if(current==root){
// root = current.left;
// }else if(isLeftChild){
// parent.left = current.left;
// }else{
// parent.right = current.left;
// }
// }
// else if(current.left==null){
// if(current==root){
// root = current.right;
// }else if(isLeftChild){
// parent.left = current.right;
// }else{
// parent.right = current.right;
// }
// }else if(current.left!=null && current.right!=null){
//
// //now we have found the minimum element in the right sub tree
// Node successor = getSuccessor(current);
// if(current==root){
// root = successor;
// }else if(isLeftChild){
// parent.left = successor;
// }else{
// parent.right = successor;
// }
// successor.left = current.left;
// }
// return true;
// }
//
// public Node getSuccessor(Node deleleNode){
// Node successsor =null;
// Node successsorParent =null;
// Node current = deleleNode.right;
// while(current!=null){
// successsorParent = successsor;
// successsor = current;
// current = current.left;
// }
// //check if successor has the right child, it cannot have left child for sure
// // if it does have the right child, add it to the left of successorParent.
//// successsorParent
// if(successsor!=deleleNode.right){
// successsorParent.left = successsor.right;
// successsor.right = deleleNode.right;
// }
// return successsor;
// }
public void insert(String id){
Node newNode = new Node(id);
if(root==null){
root = newNode;
return;
}
Node current = root;
Node parent = null;
while(true){
parent = current;
if(id.compareTo(current.data) < 0){
current = current.left;
if(current==null){
parent.left = newNode;
return;
}
}else{
current = current.right;
if(current==null){
parent.right = newNode;
return;
}
}
}
}
public void display(Node root){
// if(root!=null){
// display(root.left);
// System.out.print(" " + root.data);
// System.out.println();
// display(root.right);
// }
if(root == null) return;
Queue<Node> queue = new ArrayDeque<Node>();
queue.add(root);
try(BufferedWriter writer = new BufferedWriter(new FileWriter("C:/Users/Ali/Desktop/a.txt"))){
while(!queue.isEmpty()){
Node current = queue.peek();
writer.write("["+current.data+"]");
if (current.left != null)
queue.add(current.left);
if (current.right != null){
queue.add(current.right);
}
queue.poll();
}
}
catch (Exception e) {
// TODO: handle exception
}
}
public static void main(String arg[]){
Scanner in = new Scanner(System.in);
BinarySearchTree b = new BinarySearchTree();
System.out.println("Pleas Enter Your Pazzle Numbers :");
String input = in.next();
b.insert(input);//023156478 <--in test shde 876543210 234516780 305248167 846712305 013725846 123450678 876543210 230456178
double startTime = System.currentTimeMillis();
b.Start(b.root.data);
b.display(b.root);
System.out.println(" PARENTS OF : 123456780 TIL : "+input);
b.parent("123456780");
double endTime = System.currentTimeMillis();
double totalTime = (endTime - startTime)/1000;
System.out.println("\n This Is Total Processed Time : "+totalTime);
}
}
class Node{
String data;
Node left;
Node right;
public Node(String data){
this.data = data;
left = null;
right = null;
}
}
راستی استاد گفته بهتر بود از آ* استفاده میکردی منم نمیدونستم چیه ! الانم که فک نکنم بشه عوضش کرد:اشتباه:
خروجی هات یکم عجیبه.
مسیری که به جواب میرسی رو بد نشون میده.
تو همون تاپیک قبل مطرح کن چون به این تاپیک ارتباطی نداره جالب نیست در موردش اینجا بحث کنیم