You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
4.1 KiB
Java
145 lines
4.1 KiB
Java
/*This is a java program to search an element using Self Organizing lists.
|
|
A self-organizing list is a list that reorders its elements based on some self-organizing heuristic to improve average access time.
|
|
The aim of a self-organizing list is to improve efficiency of linear search by moving more frequently accessed items towards the head of the list.
|
|
A self-organizing list achieves near constant time for element access in the best case.
|
|
A self-organizing list uses a reorganizing algorithm to adapt to various query distributions at runtime.*/
|
|
|
|
//This is a java program to search an element in self organizing lists
|
|
import java.util.Random;
|
|
import java.util.Scanner;
|
|
|
|
class SelfOrganizingList
|
|
{
|
|
private int[] list;
|
|
private int[] count;
|
|
private int size;
|
|
|
|
public SelfOrganizingList(int listSize)
|
|
{
|
|
list = new int[listSize];
|
|
count = new int[listSize];
|
|
size = 0;
|
|
}
|
|
|
|
public boolean isEmpty()
|
|
{
|
|
return size == 0;
|
|
}
|
|
|
|
public boolean isFull()
|
|
{
|
|
return size == list.length;
|
|
}
|
|
|
|
public void makeEmpty()
|
|
{
|
|
int l = list.length;
|
|
list = new int[l];
|
|
count = new int[l];
|
|
size = 0;
|
|
}
|
|
|
|
public int getSize()
|
|
{
|
|
return size;
|
|
}
|
|
|
|
public void insert(int val)
|
|
{
|
|
if (isFull())
|
|
{
|
|
System.out.println("Error : List full!");
|
|
return;
|
|
}
|
|
list[size] = val;
|
|
count[size] = 0;
|
|
size++;
|
|
}
|
|
|
|
public void remove(int pos)
|
|
{
|
|
pos--;
|
|
if (pos < 0 || pos >= size)
|
|
{
|
|
System.out.println("Invalid position ");
|
|
return;
|
|
}
|
|
for (int i = pos; i < size - 1; i++)
|
|
{
|
|
list[i] = list[i + 1];
|
|
count[i] = count[i + 1];
|
|
}
|
|
size--;
|
|
}
|
|
|
|
public boolean search(int x)
|
|
{
|
|
boolean searchResult = false;
|
|
int pos = -1;
|
|
for (int i = 0; i < size; i++)
|
|
{
|
|
if (list[i] == x)
|
|
{
|
|
searchResult = true;
|
|
pos = i;
|
|
break;
|
|
}
|
|
}
|
|
if (searchResult)
|
|
{
|
|
count[pos]++;
|
|
int c = count[pos];
|
|
for (int i = 0; i < pos; i++)
|
|
{
|
|
if (count[pos] > count[i])
|
|
{
|
|
for (int j = pos; j > i; j--)
|
|
{
|
|
list[j] = list[j - 1];
|
|
count[j] = count[j - 1];
|
|
}
|
|
list[i] = x;
|
|
count[i] = c;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return searchResult;
|
|
}
|
|
|
|
public void printList()
|
|
{
|
|
System.out.print("\nList = ");
|
|
for (int i = 0; i < size; i++)
|
|
System.out.print(list[i] + " ");
|
|
System.out.print("\nCount = ");
|
|
for (int i = 0; i < size; i++)
|
|
System.out.print(count[i] + " ");
|
|
}
|
|
}
|
|
|
|
public class Search_Self_Organizing
|
|
{
|
|
public static void main(String[] args)
|
|
{
|
|
Random random = new Random();
|
|
int N = 20;
|
|
SelfOrganizingList list = new SelfOrganizingList(N);
|
|
for (int i = 0; i < N; i++)
|
|
list.insert(Math.abs(random.nextInt(1000)));
|
|
Scanner scan = new Scanner(System.in);
|
|
System.out.println("SelfOrganizingList Searching \n");
|
|
list.printList();
|
|
System.out.println("\nEnter integer element to search");
|
|
System.out.println("Search Result : " + list.search(scan.nextInt()));
|
|
scan.close();
|
|
}
|
|
}
|
|
/*
|
|
|
|
List = 855 318 462 851 373 360 811 401 813 50 291 346 707 118 633 217 715 594 999 99
|
|
Count = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
|
Enter integer element to search
|
|
811
|
|
Search Result : true
|