By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,898 Members | 2,039 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,898 IT Pros & Developers. It's quick & easy.

Best data structure?

P: 93
I need to find out the best data structures for A* algorithm. Well, it is not exactly A*, but I've changed it a bit. What I need is as follows. I am using Visual C++.

1. I am keeping a Map(not the STL map, but my own Map.), It is a 200*200 array.
2. i need to find the shortest paths between two locations.
3. I am keeping an Open list and a closed list for the implementation.
4. The basic operations on the Open list are by order of priority, Insertion, membership test and remove best.
5. The basic operations for the closed list are insertion and membership test. It only occationally needs a removal.

The efficiency is definitely a concern. So, what are the best data structures to be used? It would be nice if I can use the STL.
Mar 9 '07 #1
Share this Question
Share on Google+
8 Replies


sicarie
Expert Mod 2.5K+
P: 4,677
I need to find out the best data structures for A* algorithm. Well, it is not exactly A*, but I've changed it a bit. What I need is as follows. I am using Visual C++.

1. I am keeping a Map(not the STL map, but my own Map.), It is a 200*200 array.
2. i need to find the shortest paths between two locations.
3. I am keeping an Open list and a closed list for the implementation.
4. The basic operations on the Open list are by order of priority, Insertion, membership test and remove best.
5. The basic operations for the closed list are insertion and membership test. It only occationally needs a removal.

The efficiency is definitely a concern. So, what are the best data structures to be used? It would be nice if I can use the STL.
So what do you want to store - those individual elements of the array, or arrays of 200x200 items? As you know the order of priority on your list, I would research the STL's options and decide from there...
Mar 9 '07 #2

P: 93
So what do you want to store - those individual elements of the array, or arrays of 200x200 items? As you know the order of priority on your list, I would research the STL's options and decide from there...
The individual elements of the array. An element of the array is an object of a class "MyNode", i can provide the overloaded operators <, > , == for this class. So, i want to store these nodes in the open list in descending order. the node with the lowest values is at the top. And I want good times for membership test on both the open list and the closed list. Thanx in advance.
Mar 9 '07 #3

Ganon11
Expert 2.5K+
P: 3,652
Well, if you want fast performance during sorting, I'd recommend using a linked list, as insertion is very easy with the pointers. However, finding the node you want will be tedious compared to, say, a vector.
Mar 9 '07 #4

P: 93
Well, if you want fast performance during sorting, I'd recommend using a linked list, as insertion is very easy with the pointers. However, finding the node you want will be tedious compared to, say, a vector.

Yes, that is the problem. one of the main operations I need is to check for a node. So, isnt there anything better than those two data structures? The priority_queue class in the STL would have suited me fine if it offered any way of looking at it's members. But as far as i know, it only offers a peek at the top element which is most dissatisfyiing.
Mar 11 '07 #5

Ganon11
Expert 2.5K+
P: 3,652
As far as I can remember,

VECTOR:

Random insertion (what is needed for sorted vector) is O(n) time
Random Selection is O(1) time
Insertion to front or back is O(1) time

LINKED LIST:

Random insertion is O(n) time (to find the place where the node belongs)
Random Selection is O(n) time
Insertion to front is O(1) time
Insertion to back is O(n) time (to traverse the entire list)

Now, if you wanted to build the vector/list before sorting, big-O times may vary. But from here, it looks like vector is a winner in my book.
Mar 11 '07 #6

P: 63
iLL
If you need to find an element with minimum cost, use a binary tree. If you are going to be doing a lot of removing and adding, Id use a hash table. Its easier to maintain.
Mar 11 '07 #7

Ganon11
Expert 2.5K+
P: 3,652
If you need to find an element with minimum cost, use a binary tree. If you are going to be doing a lot of removing and adding, Id use a hash table. Its easier to maintain.
A hash table would be difficult to keep sorted, since each string, integer pair would produce a unique hash value that wouldn't necessarily lend itself to sorting. A binary tree is a good idea - I had completely forgotten about it! If I'm not mistaken,

Adding an element is O(log n)
Finding an element is O(log n)
It's already sorted by definition

Looks like binary trees are the best way to go!
Mar 11 '07 #8

P: 93
A hash table would be difficult to keep sorted, since each string, integer pair would produce a unique hash value that wouldn't necessarily lend itself to sorting. A binary tree is a good idea - I had completely forgotten about it! If I'm not mistaken,

Adding an element is O(log n)
Finding an element is O(log n)
It's already sorted by definition

Looks like binary trees are the best way to go!
Seems like I have no choice. I was planning to use the priority_queue present in the STL, but it does not seerve my purpose. i think i will use the binary tree after all. thanx everyone for the help.
Mar 11 '07 #9

Post your reply

Sign in to post your reply or Sign up for a free account.