speedups
This commit is contained in:
parent
eb575287b2
commit
c830b99865
|
@ -4,8 +4,11 @@
|
||||||
/*
|
/*
|
||||||
### -------------------------------------------------- ###
|
### -------------------------------------------------- ###
|
||||||
$Author: hcl $
|
$Author: hcl $
|
||||||
$Date: 2002/03/20 13:25:50 $
|
$Date: 2002/03/22 16:04:02 $
|
||||||
$Log: ocrAstar.c,v $
|
$Log: ocrAstar.c,v $
|
||||||
|
Revision 1.3 2002/03/22 16:04:02 hcl
|
||||||
|
speedups
|
||||||
|
|
||||||
Revision 1.2 2002/03/20 13:25:50 hcl
|
Revision 1.2 2002/03/20 13:25:50 hcl
|
||||||
SymX bug.
|
SymX bug.
|
||||||
|
|
||||||
|
@ -287,29 +290,69 @@ void clean_tag_list (ocrWSegment *list) {
|
||||||
* insert elem keeping the list sorted by increasing cost+h
|
* insert elem keeping the list sorted by increasing cost+h
|
||||||
**/
|
**/
|
||||||
ocrWSegment *insert (ocrWSegment *list, ocrWSegment *elem) {
|
ocrWSegment *insert (ocrWSegment *list, ocrWSegment *elem) {
|
||||||
|
ocrWSegment *prec, *rval;
|
||||||
|
|
||||||
assert (elem);
|
assert (elem);
|
||||||
|
|
||||||
if (!list) {
|
if (!list) {
|
||||||
elem->AUX = NULL;
|
elem->AUX = NULL;
|
||||||
return elem;
|
return elem;
|
||||||
/*} else if ( (elem->HCOST) > (list->HCOST) ) {*/
|
} else if (!(list->AUX)) {
|
||||||
} else if ( (elem->COST) > (list->COST) ) {
|
if ( elem->HCOST < list->HCOST ) {
|
||||||
list->AUX = insert (list->AUX, elem);
|
elem->AUX = list;
|
||||||
return list;
|
return elem;
|
||||||
} else if ( ((elem->HCOST) == (list->HCOST)) && ((elem->COST) > (list->COST)) ){
|
} else if ( elem->HCOST == list->HCOST ) {
|
||||||
/*} else if ( ((elem->COST) == (list->COST)) && ((elem->H) > (list->H)) ){*/
|
if ( elem->COST < list->COST ) {
|
||||||
list->AUX = insert (list->AUX, elem);
|
elem->AUX = list;
|
||||||
return list;
|
return elem;
|
||||||
|
} else {
|
||||||
|
list->AUX = elem;
|
||||||
|
elem->AUX = NULL;
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
list->AUX = elem;
|
||||||
|
elem->AUX = NULL;
|
||||||
|
return list;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
elem->AUX = list;
|
rval = list;
|
||||||
return elem;
|
prec = list;
|
||||||
|
list = list->AUX;
|
||||||
|
|
||||||
|
while (list) {
|
||||||
|
|
||||||
|
if ( elem->HCOST < list->HCOST ) {
|
||||||
|
elem->AUX = list;
|
||||||
|
prec->AUX = elem;
|
||||||
|
return rval;
|
||||||
|
} else if ( elem->HCOST == list->HCOST ) {
|
||||||
|
if ( elem->COST < list->COST ) {
|
||||||
|
prec->AUX = elem;
|
||||||
|
elem->AUX = list;
|
||||||
|
return rval;
|
||||||
|
} else {
|
||||||
|
prec = list;
|
||||||
|
list = list->AUX;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
prec = list;
|
||||||
|
list = list->AUX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
prec->AUX = elem;
|
||||||
|
elem->AUX = NULL;
|
||||||
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ocrWSegment *_remove (ocrWSegment *list, ocrWSegment *elem) {
|
ocrWSegment *_remove (ocrWSegment *list, ocrWSegment *elem) {
|
||||||
|
ocrWSegment *prec;
|
||||||
|
ocrWSegment *orig;
|
||||||
|
|
||||||
assert (elem);
|
assert (elem);
|
||||||
|
|
||||||
if (!list)
|
if (!list)
|
||||||
|
@ -320,8 +363,22 @@ ocrWSegment *_remove (ocrWSegment *list, ocrWSegment *elem) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
orig = list;
|
||||||
|
do {
|
||||||
|
prec = list;
|
||||||
|
list = list->AUX;
|
||||||
|
if (elem == list) {
|
||||||
|
prec->AUX = list->AUX;
|
||||||
|
elem->AUX = NULL;
|
||||||
|
return orig;
|
||||||
|
}
|
||||||
|
} while (list);
|
||||||
|
|
||||||
|
#if 0
|
||||||
list->AUX = _remove (list->AUX, elem);
|
list->AUX = _remove (list->AUX, elem);
|
||||||
return list;
|
return list;
|
||||||
|
#endif
|
||||||
|
return orig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue