union find algorithm
This commit is contained in:
		
							parent
							
								
									3c192b7712
								
							
						
					
					
						commit
						f2817471d1
					
				
					 12 changed files with 2001239 additions and 0 deletions
				
			
		
							
								
								
									
										2000001
									
								
								fundamentals/exrecises/union_find/largeUF.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2000001
									
								
								fundamentals/exrecises/union_find/largeUF.txt
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										901
									
								
								fundamentals/exrecises/union_find/mediumUF.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										901
									
								
								fundamentals/exrecises/union_find/mediumUF.txt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,901 @@ | |||
| 625 | ||||
| 528 503 | ||||
| 548 523 | ||||
| 389 414 | ||||
| 446 421 | ||||
| 552 553 | ||||
| 154 155 | ||||
| 173 174 | ||||
| 373 348 | ||||
| 567 542 | ||||
| 44 43 | ||||
| 370 345 | ||||
| 546 547 | ||||
| 204 229 | ||||
| 404 429 | ||||
| 240 215 | ||||
| 364 389 | ||||
| 612 611 | ||||
| 513 512 | ||||
| 377 376 | ||||
| 468 443 | ||||
| 410 435 | ||||
| 243 218 | ||||
| 347 322 | ||||
| 580 581 | ||||
| 188 163 | ||||
| 61 36 | ||||
| 545 546 | ||||
| 93 68 | ||||
| 84 83 | ||||
| 94 69 | ||||
| 7 8 | ||||
| 619 618 | ||||
| 314 339 | ||||
| 155 156 | ||||
| 150 175 | ||||
| 605 580 | ||||
| 118 93 | ||||
| 385 360 | ||||
| 459 458 | ||||
| 167 168 | ||||
| 107 108 | ||||
| 44 69 | ||||
| 335 334 | ||||
| 251 276 | ||||
| 196 197 | ||||
| 501 502 | ||||
| 212 187 | ||||
| 251 250 | ||||
| 269 270 | ||||
| 332 331 | ||||
| 125 150 | ||||
| 391 416 | ||||
| 366 367 | ||||
| 65 40 | ||||
| 515 540 | ||||
| 248 273 | ||||
| 34 9 | ||||
| 480 479 | ||||
| 198 173 | ||||
| 463 488 | ||||
| 111 86 | ||||
| 524 499 | ||||
| 28 27 | ||||
| 323 324 | ||||
| 198 199 | ||||
| 146 147 | ||||
| 133 158 | ||||
| 416 415 | ||||
| 103 102 | ||||
| 457 482 | ||||
| 57 82 | ||||
| 88 113 | ||||
| 535 560 | ||||
| 181 180 | ||||
| 605 606 | ||||
| 481 456 | ||||
| 127 102 | ||||
| 470 445 | ||||
| 229 254 | ||||
| 169 170 | ||||
| 386 385 | ||||
| 383 384 | ||||
| 153 152 | ||||
| 541 542 | ||||
| 36 37 | ||||
| 474 473 | ||||
| 126 125 | ||||
| 534 509 | ||||
| 154 129 | ||||
| 591 592 | ||||
| 161 186 | ||||
| 209 234 | ||||
| 88 87 | ||||
| 61 60 | ||||
| 161 136 | ||||
| 472 447 | ||||
| 239 240 | ||||
| 102 101 | ||||
| 342 343 | ||||
| 566 565 | ||||
| 567 568 | ||||
| 41 42 | ||||
| 154 153 | ||||
| 471 496 | ||||
| 358 383 | ||||
| 423 448 | ||||
| 241 242 | ||||
| 292 293 | ||||
| 363 364 | ||||
| 361 362 | ||||
| 258 283 | ||||
| 75 100 | ||||
| 61 86 | ||||
| 81 106 | ||||
| 52 27 | ||||
| 230 255 | ||||
| 309 334 | ||||
| 378 379 | ||||
| 136 111 | ||||
| 439 464 | ||||
| 532 533 | ||||
| 166 191 | ||||
| 523 522 | ||||
| 210 211 | ||||
| 115 140 | ||||
| 347 346 | ||||
| 218 217 | ||||
| 561 560 | ||||
| 526 501 | ||||
| 174 149 | ||||
| 258 259 | ||||
| 77 52 | ||||
| 36 11 | ||||
| 307 306 | ||||
| 577 552 | ||||
| 62 61 | ||||
| 450 425 | ||||
| 569 570 | ||||
| 268 293 | ||||
| 79 78 | ||||
| 233 208 | ||||
| 571 570 | ||||
| 534 535 | ||||
| 527 552 | ||||
| 224 199 | ||||
| 409 408 | ||||
| 521 520 | ||||
| 621 622 | ||||
| 493 518 | ||||
| 107 106 | ||||
| 511 510 | ||||
| 298 299 | ||||
| 37 62 | ||||
| 224 249 | ||||
| 405 380 | ||||
| 236 237 | ||||
| 120 121 | ||||
| 393 418 | ||||
| 206 231 | ||||
| 287 288 | ||||
| 593 568 | ||||
| 34 59 | ||||
| 483 484 | ||||
| 226 227 | ||||
| 73 74 | ||||
| 276 277 | ||||
| 588 587 | ||||
| 288 313 | ||||
| 410 385 | ||||
| 506 505 | ||||
| 597 598 | ||||
| 337 312 | ||||
| 55 56 | ||||
| 300 325 | ||||
| 135 134 | ||||
| 4 29 | ||||
| 501 500 | ||||
| 438 437 | ||||
| 311 312 | ||||
| 598 599 | ||||
| 320 345 | ||||
| 211 236 | ||||
| 587 562 | ||||
| 74 99 | ||||
| 473 498 | ||||
| 278 279 | ||||
| 394 369 | ||||
| 123 148 | ||||
| 233 232 | ||||
| 252 277 | ||||
| 177 202 | ||||
| 160 185 | ||||
| 331 356 | ||||
| 192 191 | ||||
| 119 118 | ||||
| 576 601 | ||||
| 317 316 | ||||
| 462 487 | ||||
| 42 43 | ||||
| 336 311 | ||||
| 515 490 | ||||
| 13 14 | ||||
| 210 235 | ||||
| 473 448 | ||||
| 342 341 | ||||
| 340 315 | ||||
| 413 388 | ||||
| 514 515 | ||||
| 144 143 | ||||
| 146 145 | ||||
| 541 566 | ||||
| 128 103 | ||||
| 184 159 | ||||
| 488 489 | ||||
| 454 455 | ||||
| 82 83 | ||||
| 70 45 | ||||
| 221 222 | ||||
| 241 240 | ||||
| 412 411 | ||||
| 591 590 | ||||
| 592 593 | ||||
| 276 301 | ||||
| 452 453 | ||||
| 256 255 | ||||
| 397 372 | ||||
| 201 200 | ||||
| 232 207 | ||||
| 466 465 | ||||
| 561 586 | ||||
| 417 442 | ||||
| 409 434 | ||||
| 238 239 | ||||
| 389 390 | ||||
| 26 1 | ||||
| 510 485 | ||||
| 283 282 | ||||
| 281 306 | ||||
| 449 474 | ||||
| 324 349 | ||||
| 121 146 | ||||
| 111 112 | ||||
| 434 435 | ||||
| 507 508 | ||||
| 103 104 | ||||
| 319 294 | ||||
| 455 480 | ||||
| 558 557 | ||||
| 291 292 | ||||
| 553 578 | ||||
| 392 391 | ||||
| 552 551 | ||||
| 55 80 | ||||
| 538 539 | ||||
| 367 392 | ||||
| 340 365 | ||||
| 272 297 | ||||
| 266 265 | ||||
| 401 376 | ||||
| 279 280 | ||||
| 516 515 | ||||
| 178 177 | ||||
| 572 571 | ||||
| 154 179 | ||||
| 263 262 | ||||
| 6 31 | ||||
| 323 348 | ||||
| 481 506 | ||||
| 178 179 | ||||
| 526 527 | ||||
| 444 469 | ||||
| 273 274 | ||||
| 132 133 | ||||
| 275 300 | ||||
| 261 236 | ||||
| 344 369 | ||||
| 63 38 | ||||
| 5 30 | ||||
| 301 300 | ||||
| 86 87 | ||||
| 9 10 | ||||
| 344 319 | ||||
| 428 427 | ||||
| 400 375 | ||||
| 350 375 | ||||
| 235 236 | ||||
| 337 336 | ||||
| 616 615 | ||||
| 381 380 | ||||
| 58 59 | ||||
| 492 493 | ||||
| 555 556 | ||||
| 459 434 | ||||
| 368 369 | ||||
| 407 382 | ||||
| 166 141 | ||||
| 70 95 | ||||
| 380 355 | ||||
| 34 35 | ||||
| 49 24 | ||||
| 126 127 | ||||
| 403 378 | ||||
| 509 484 | ||||
| 613 588 | ||||
| 208 207 | ||||
| 143 168 | ||||
| 406 431 | ||||
| 263 238 | ||||
| 595 596 | ||||
| 218 193 | ||||
| 183 182 | ||||
| 195 220 | ||||
| 381 406 | ||||
| 64 65 | ||||
| 371 372 | ||||
| 531 506 | ||||
| 218 219 | ||||
| 144 145 | ||||
| 475 450 | ||||
| 547 548 | ||||
| 363 362 | ||||
| 337 362 | ||||
| 214 239 | ||||
| 110 111 | ||||
| 600 575 | ||||
| 105 106 | ||||
| 147 148 | ||||
| 599 574 | ||||
| 622 623 | ||||
| 319 320 | ||||
| 36 35 | ||||
| 258 233 | ||||
| 266 267 | ||||
| 481 480 | ||||
| 414 439 | ||||
| 169 168 | ||||
| 479 478 | ||||
| 224 223 | ||||
| 181 182 | ||||
| 351 326 | ||||
| 466 441 | ||||
| 85 60 | ||||
| 140 165 | ||||
| 91 90 | ||||
| 263 264 | ||||
| 188 187 | ||||
| 446 447 | ||||
| 607 606 | ||||
| 341 316 | ||||
| 143 142 | ||||
| 443 442 | ||||
| 354 353 | ||||
| 162 137 | ||||
| 281 256 | ||||
| 549 574 | ||||
| 407 408 | ||||
| 575 550 | ||||
| 171 170 | ||||
| 389 388 | ||||
| 390 391 | ||||
| 250 225 | ||||
| 536 537 | ||||
| 227 228 | ||||
| 84 59 | ||||
| 139 140 | ||||
| 485 484 | ||||
| 573 598 | ||||
| 356 381 | ||||
| 314 315 | ||||
| 299 324 | ||||
| 370 395 | ||||
| 166 165 | ||||
| 63 62 | ||||
| 507 506 | ||||
| 426 425 | ||||
| 479 454 | ||||
| 545 570 | ||||
| 376 375 | ||||
| 572 597 | ||||
| 606 581 | ||||
| 278 277 | ||||
| 303 302 | ||||
| 190 165 | ||||
| 230 205 | ||||
| 175 200 | ||||
| 529 528 | ||||
| 18 17 | ||||
| 458 457 | ||||
| 514 513 | ||||
| 617 616 | ||||
| 298 323 | ||||
| 162 161 | ||||
| 471 472 | ||||
| 81 56 | ||||
| 182 207 | ||||
| 539 564 | ||||
| 573 572 | ||||
| 596 621 | ||||
| 64 39 | ||||
| 571 546 | ||||
| 554 555 | ||||
| 388 363 | ||||
| 351 376 | ||||
| 304 329 | ||||
| 123 122 | ||||
| 135 160 | ||||
| 157 132 | ||||
| 599 624 | ||||
| 451 426 | ||||
| 162 187 | ||||
| 502 477 | ||||
| 508 483 | ||||
| 141 140 | ||||
| 303 328 | ||||
| 551 576 | ||||
| 471 446 | ||||
| 161 160 | ||||
| 465 490 | ||||
| 3 2 | ||||
| 138 113 | ||||
| 309 284 | ||||
| 452 451 | ||||
| 414 413 | ||||
| 540 565 | ||||
| 210 185 | ||||
| 350 325 | ||||
| 383 382 | ||||
| 2 1 | ||||
| 598 623 | ||||
| 97 72 | ||||
| 485 460 | ||||
| 315 316 | ||||
| 19 20 | ||||
| 31 32 | ||||
| 546 521 | ||||
| 320 321 | ||||
| 29 54 | ||||
| 330 331 | ||||
| 92 67 | ||||
| 480 505 | ||||
| 274 249 | ||||
| 22 47 | ||||
| 304 279 | ||||
| 493 468 | ||||
| 424 423 | ||||
| 39 40 | ||||
| 164 165 | ||||
| 269 268 | ||||
| 445 446 | ||||
| 228 203 | ||||
| 384 409 | ||||
| 390 365 | ||||
| 283 308 | ||||
| 374 399 | ||||
| 361 386 | ||||
| 94 119 | ||||
| 237 262 | ||||
| 43 68 | ||||
| 295 270 | ||||
| 400 425 | ||||
| 360 335 | ||||
| 122 121 | ||||
| 469 468 | ||||
| 189 188 | ||||
| 377 352 | ||||
| 367 342 | ||||
| 67 42 | ||||
| 616 591 | ||||
| 442 467 | ||||
| 558 533 | ||||
| 395 394 | ||||
| 3 28 | ||||
| 476 477 | ||||
| 257 258 | ||||
| 280 281 | ||||
| 517 542 | ||||
| 505 504 | ||||
| 302 301 | ||||
| 14 15 | ||||
| 523 498 | ||||
| 393 368 | ||||
| 46 71 | ||||
| 141 142 | ||||
| 477 452 | ||||
| 535 510 | ||||
| 237 238 | ||||
| 232 231 | ||||
| 5 6 | ||||
| 75 50 | ||||
| 278 253 | ||||
| 68 69 | ||||
| 584 559 | ||||
| 503 504 | ||||
| 281 282 | ||||
| 19 44 | ||||
| 411 410 | ||||
| 290 265 | ||||
| 579 554 | ||||
| 85 84 | ||||
| 65 66 | ||||
| 9 8 | ||||
| 484 459 | ||||
| 427 402 | ||||
| 195 196 | ||||
| 617 618 | ||||
| 418 443 | ||||
| 101 126 | ||||
| 268 243 | ||||
| 92 117 | ||||
| 290 315 | ||||
| 562 561 | ||||
| 255 280 | ||||
| 488 487 | ||||
| 578 603 | ||||
| 80 79 | ||||
| 57 58 | ||||
| 77 78 | ||||
| 417 418 | ||||
| 246 271 | ||||
| 95 96 | ||||
| 234 233 | ||||
| 530 555 | ||||
| 543 568 | ||||
| 396 397 | ||||
| 22 23 | ||||
| 29 28 | ||||
| 502 527 | ||||
| 12 13 | ||||
| 217 216 | ||||
| 522 547 | ||||
| 357 332 | ||||
| 543 518 | ||||
| 151 176 | ||||
| 69 70 | ||||
| 556 557 | ||||
| 247 248 | ||||
| 513 538 | ||||
| 204 205 | ||||
| 604 605 | ||||
| 528 527 | ||||
| 455 456 | ||||
| 624 623 | ||||
| 284 285 | ||||
| 27 26 | ||||
| 94 95 | ||||
| 486 511 | ||||
| 192 167 | ||||
| 372 347 | ||||
| 129 104 | ||||
| 349 374 | ||||
| 313 314 | ||||
| 354 329 | ||||
| 294 293 | ||||
| 377 378 | ||||
| 291 290 | ||||
| 433 408 | ||||
| 57 56 | ||||
| 215 190 | ||||
| 467 492 | ||||
| 383 408 | ||||
| 569 594 | ||||
| 209 208 | ||||
| 2 27 | ||||
| 466 491 | ||||
| 147 122 | ||||
| 112 113 | ||||
| 21 46 | ||||
| 284 259 | ||||
| 563 538 | ||||
| 392 417 | ||||
| 458 433 | ||||
| 464 465 | ||||
| 297 298 | ||||
| 336 361 | ||||
| 607 582 | ||||
| 553 554 | ||||
| 225 200 | ||||
| 186 211 | ||||
| 33 34 | ||||
| 237 212 | ||||
| 52 51 | ||||
| 620 595 | ||||
| 492 517 | ||||
| 585 610 | ||||
| 257 282 | ||||
| 520 545 | ||||
| 541 540 | ||||
| 269 244 | ||||
| 609 584 | ||||
| 109 84 | ||||
| 247 246 | ||||
| 562 537 | ||||
| 172 197 | ||||
| 166 167 | ||||
| 264 265 | ||||
| 129 130 | ||||
| 89 114 | ||||
| 204 179 | ||||
| 51 76 | ||||
| 415 390 | ||||
| 54 53 | ||||
| 219 244 | ||||
| 491 490 | ||||
| 494 493 | ||||
| 87 62 | ||||
| 158 183 | ||||
| 517 518 | ||||
| 358 359 | ||||
| 105 104 | ||||
| 285 260 | ||||
| 343 318 | ||||
| 348 347 | ||||
| 615 614 | ||||
| 169 144 | ||||
| 53 78 | ||||
| 494 495 | ||||
| 576 577 | ||||
| 23 24 | ||||
| 22 21 | ||||
| 41 40 | ||||
| 467 466 | ||||
| 112 87 | ||||
| 245 220 | ||||
| 442 441 | ||||
| 411 436 | ||||
| 256 257 | ||||
| 469 494 | ||||
| 441 416 | ||||
| 132 107 | ||||
| 468 467 | ||||
| 345 344 | ||||
| 608 609 | ||||
| 358 333 | ||||
| 418 419 | ||||
| 430 429 | ||||
| 130 131 | ||||
| 127 128 | ||||
| 115 90 | ||||
| 364 365 | ||||
| 296 271 | ||||
| 260 235 | ||||
| 229 228 | ||||
| 232 257 | ||||
| 189 190 | ||||
| 234 235 | ||||
| 195 170 | ||||
| 117 118 | ||||
| 487 486 | ||||
| 203 204 | ||||
| 142 117 | ||||
| 582 583 | ||||
| 561 536 | ||||
| 7 32 | ||||
| 387 388 | ||||
| 333 334 | ||||
| 420 421 | ||||
| 317 292 | ||||
| 327 352 | ||||
| 564 563 | ||||
| 39 14 | ||||
| 177 152 | ||||
| 144 119 | ||||
| 426 401 | ||||
| 248 223 | ||||
| 566 567 | ||||
| 53 28 | ||||
| 106 131 | ||||
| 473 472 | ||||
| 525 526 | ||||
| 327 302 | ||||
| 382 381 | ||||
| 222 197 | ||||
| 610 609 | ||||
| 522 521 | ||||
| 291 316 | ||||
| 339 338 | ||||
| 328 329 | ||||
| 31 56 | ||||
| 247 222 | ||||
| 185 186 | ||||
| 554 529 | ||||
| 393 392 | ||||
| 108 83 | ||||
| 514 489 | ||||
| 48 23 | ||||
| 37 12 | ||||
| 46 45 | ||||
| 25 0 | ||||
| 463 462 | ||||
| 101 76 | ||||
| 11 10 | ||||
| 548 573 | ||||
| 137 112 | ||||
| 123 124 | ||||
| 359 360 | ||||
| 489 490 | ||||
| 368 367 | ||||
| 71 96 | ||||
| 229 230 | ||||
| 496 495 | ||||
| 366 365 | ||||
| 86 85 | ||||
| 496 497 | ||||
| 482 481 | ||||
| 326 301 | ||||
| 278 303 | ||||
| 139 114 | ||||
| 71 70 | ||||
| 275 276 | ||||
| 223 198 | ||||
| 590 565 | ||||
| 496 521 | ||||
| 16 41 | ||||
| 501 476 | ||||
| 371 370 | ||||
| 511 536 | ||||
| 577 602 | ||||
| 37 38 | ||||
| 423 422 | ||||
| 71 72 | ||||
| 399 424 | ||||
| 171 146 | ||||
| 32 33 | ||||
| 157 182 | ||||
| 608 583 | ||||
| 474 499 | ||||
| 205 206 | ||||
| 539 514 | ||||
| 601 600 | ||||
| 419 420 | ||||
| 208 183 | ||||
| 537 538 | ||||
| 110 85 | ||||
| 105 130 | ||||
| 288 289 | ||||
| 455 430 | ||||
| 531 532 | ||||
| 337 338 | ||||
| 227 202 | ||||
| 120 145 | ||||
| 559 534 | ||||
| 261 262 | ||||
| 241 216 | ||||
| 379 354 | ||||
| 430 405 | ||||
| 241 266 | ||||
| 396 421 | ||||
| 317 318 | ||||
| 139 164 | ||||
| 310 285 | ||||
| 478 477 | ||||
| 532 557 | ||||
| 238 213 | ||||
| 195 194 | ||||
| 359 384 | ||||
| 243 242 | ||||
| 432 457 | ||||
| 422 447 | ||||
| 519 518 | ||||
| 271 272 | ||||
| 12 11 | ||||
| 478 453 | ||||
| 453 428 | ||||
| 614 613 | ||||
| 138 139 | ||||
| 96 97 | ||||
| 399 398 | ||||
| 55 54 | ||||
| 199 174 | ||||
| 566 591 | ||||
| 213 188 | ||||
| 488 513 | ||||
| 169 194 | ||||
| 603 602 | ||||
| 293 318 | ||||
| 432 431 | ||||
| 524 523 | ||||
| 30 31 | ||||
| 88 63 | ||||
| 172 173 | ||||
| 510 509 | ||||
| 272 273 | ||||
| 559 558 | ||||
| 494 519 | ||||
| 374 373 | ||||
| 547 572 | ||||
| 263 288 | ||||
| 17 16 | ||||
| 78 103 | ||||
| 542 543 | ||||
| 131 132 | ||||
| 519 544 | ||||
| 504 529 | ||||
| 60 59 | ||||
| 356 355 | ||||
| 341 340 | ||||
| 415 414 | ||||
| 285 286 | ||||
| 439 438 | ||||
| 588 563 | ||||
| 25 50 | ||||
| 463 438 | ||||
| 581 556 | ||||
| 244 245 | ||||
| 500 475 | ||||
| 93 92 | ||||
| 274 299 | ||||
| 351 350 | ||||
| 152 127 | ||||
| 472 497 | ||||
| 440 415 | ||||
| 214 215 | ||||
| 231 230 | ||||
| 80 81 | ||||
| 550 525 | ||||
| 511 512 | ||||
| 483 458 | ||||
| 67 68 | ||||
| 255 254 | ||||
| 589 588 | ||||
| 147 172 | ||||
| 454 453 | ||||
| 587 612 | ||||
| 343 368 | ||||
| 508 509 | ||||
| 240 265 | ||||
| 49 48 | ||||
| 184 183 | ||||
| 583 558 | ||||
| 164 189 | ||||
| 461 436 | ||||
| 109 134 | ||||
| 196 171 | ||||
| 156 181 | ||||
| 124 99 | ||||
| 531 530 | ||||
| 116 91 | ||||
| 431 430 | ||||
| 326 325 | ||||
| 44 45 | ||||
| 507 482 | ||||
| 557 582 | ||||
| 519 520 | ||||
| 167 142 | ||||
| 469 470 | ||||
| 563 562 | ||||
| 507 532 | ||||
| 94 93 | ||||
| 3 4 | ||||
| 366 391 | ||||
| 456 431 | ||||
| 524 549 | ||||
| 489 464 | ||||
| 397 398 | ||||
| 98 97 | ||||
| 377 402 | ||||
| 413 412 | ||||
| 148 149 | ||||
| 91 66 | ||||
| 308 333 | ||||
| 16 15 | ||||
| 312 287 | ||||
| 212 211 | ||||
| 486 461 | ||||
| 571 596 | ||||
| 226 251 | ||||
| 356 357 | ||||
| 145 170 | ||||
| 295 294 | ||||
| 308 309 | ||||
| 163 138 | ||||
| 364 339 | ||||
| 416 417 | ||||
| 402 401 | ||||
| 302 277 | ||||
| 349 348 | ||||
| 582 581 | ||||
| 176 175 | ||||
| 254 279 | ||||
| 589 614 | ||||
| 322 297 | ||||
| 587 586 | ||||
| 221 246 | ||||
| 526 551 | ||||
| 159 158 | ||||
| 460 461 | ||||
| 452 427 | ||||
| 329 330 | ||||
| 321 322 | ||||
| 82 107 | ||||
| 462 461 | ||||
| 495 520 | ||||
| 303 304 | ||||
| 90 65 | ||||
| 295 320 | ||||
| 160 159 | ||||
| 463 464 | ||||
| 10 35 | ||||
| 619 594 | ||||
| 403 402 | ||||
							
								
								
									
										44
									
								
								fundamentals/exrecises/union_find/quick_find.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								fundamentals/exrecises/union_find/quick_find.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,44 @@ | |||
| package unionfind | ||||
| 
 | ||||
| type quickFind struct { | ||||
| 	id    []int | ||||
| 	count int | ||||
| } | ||||
| 
 | ||||
| func NewQuickFind(count int) UnionFind { | ||||
| 	id := make([]int, count) | ||||
| 
 | ||||
| 	for i := range id { | ||||
| 		id[i] = i | ||||
| 	} | ||||
| 
 | ||||
| 	return &quickFind{id, count} | ||||
| } | ||||
| 
 | ||||
| func (qf *quickFind) Find(site int) int { | ||||
| 	return qf.id[site] | ||||
| } | ||||
| 
 | ||||
| func (qf *quickFind) Union(aSite, bSite int) { | ||||
| 	aComponent := qf.Find(aSite) | ||||
| 	bComponent := qf.Find(bSite) | ||||
| 
 | ||||
| 	if aComponent == bComponent { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	for site, component := range qf.id { | ||||
| 		if component == aComponent { | ||||
| 			qf.id[site] = bComponent | ||||
| 		} | ||||
| 	} | ||||
| 	qf.count-- | ||||
| } | ||||
| 
 | ||||
| func (qf *quickFind) Connected(aSite, bSite int) bool { | ||||
| 	return qf.Find(aSite) == qf.Find(bSite) | ||||
| } | ||||
| 
 | ||||
| func (qf *quickFind) Count() int { | ||||
| 	return qf.count | ||||
| } | ||||
							
								
								
									
										44
									
								
								fundamentals/exrecises/union_find/quick_union.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								fundamentals/exrecises/union_find/quick_union.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,44 @@ | |||
| package unionfind | ||||
| 
 | ||||
| type quickUnion struct { | ||||
| 	id    []int | ||||
| 	count int | ||||
| } | ||||
| 
 | ||||
| func NewQuickUnion(count int) UnionFind { | ||||
| 	id := make([]int, count) | ||||
| 
 | ||||
| 	for i := range id { | ||||
| 		id[i] = i | ||||
| 	} | ||||
| 
 | ||||
| 	return &quickUnion{id, count} | ||||
| } | ||||
| 
 | ||||
| func (qf *quickUnion) Find(site int) int { | ||||
| 	for site != qf.id[site] { | ||||
| 		site = qf.id[site] | ||||
| 	} | ||||
| 
 | ||||
| 	return site | ||||
| } | ||||
| 
 | ||||
| func (qf *quickUnion) Union(aSite, bSite int) { | ||||
| 	aComponent := qf.Find(aSite) | ||||
| 	bComponent := qf.Find(bSite) | ||||
| 
 | ||||
| 	if aComponent == bComponent { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	qf.id[aComponent] = bComponent | ||||
| 	qf.count-- | ||||
| } | ||||
| 
 | ||||
| func (qf *quickUnion) Connected(aSite, bSite int) bool { | ||||
| 	return qf.Find(aSite) == qf.Find(bSite) | ||||
| } | ||||
| 
 | ||||
| func (qf *quickUnion) Count() int { | ||||
| 	return qf.count | ||||
| } | ||||
							
								
								
									
										11
									
								
								fundamentals/exrecises/union_find/test_count.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								fundamentals/exrecises/union_find/test_count.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| package unionfind | ||||
| 
 | ||||
| import "log" | ||||
| 
 | ||||
| func testCount(i implementation) { | ||||
| 	qf := i.create(10) | ||||
| 
 | ||||
| 	if qf.Count() != 10 { | ||||
| 		log.Fatalf("%v: Before any union number of components should be equal to number of sites", i.name) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										53
									
								
								fundamentals/exrecises/union_find/test_file.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								fundamentals/exrecises/union_find/test_file.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,53 @@ | |||
| package unionfind | ||||
| 
 | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"fmt" | ||||
| 	"log" | ||||
| 	"os" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| func testFile(fileName string, components int, i implementation) { | ||||
| 	lines := readByLine(fileName) | ||||
| 	count, _ := strconv.Atoi(<-lines) | ||||
| 	qf := i.create(count) | ||||
| 
 | ||||
| 	for line := range lines { | ||||
| 		first, second := pair(line) | ||||
| 		if qf.Connected(first, second) { | ||||
| 			continue | ||||
| 		} | ||||
| 		qf.Union(first, second) | ||||
| 	} | ||||
| 
 | ||||
| 	if components != qf.Count() { | ||||
| 		log.Fatalf("%v: Expected components count: %v, got: %v", i.name, components, qf.Count()) | ||||
| 	} | ||||
| 	fmt.Printf("%v: Components: %v\n", i.name, qf.Count()) | ||||
| } | ||||
| 
 | ||||
| func readByLine(fileName string) <-chan string { | ||||
| 	file, _ := os.Open(fileName) | ||||
| 	scanner := bufio.NewScanner(file) | ||||
| 	line := make(chan string) | ||||
| 
 | ||||
| 	go func() { | ||||
| 		defer close(line) | ||||
| 		for scanner.Scan() { | ||||
| 			line <- scanner.Text() | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
| 	return line | ||||
| } | ||||
| 
 | ||||
| func pair(str string) (int, int) { | ||||
| 	numbers := strings.Split(str, " ") | ||||
| 
 | ||||
| 	a, _ := strconv.Atoi(numbers[0]) | ||||
| 	b, _ := strconv.Atoi(numbers[1]) | ||||
| 
 | ||||
| 	return a, b | ||||
| } | ||||
							
								
								
									
										11
									
								
								fundamentals/exrecises/union_find/test_find.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								fundamentals/exrecises/union_find/test_find.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| package unionfind | ||||
| 
 | ||||
| import "log" | ||||
| 
 | ||||
| func testFind(i implementation) { | ||||
| 	qf := i.create(2) | ||||
| 
 | ||||
| 	if qf.Find(0) != 0 || qf.Find(1) != 1 { | ||||
| 		log.Fatalf("%v Before union all sites belongs to component with same number", i.name) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										33
									
								
								fundamentals/exrecises/union_find/test_union.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								fundamentals/exrecises/union_find/test_union.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | |||
| package unionfind | ||||
| 
 | ||||
| import "log" | ||||
| 
 | ||||
| func testUnion(i implementation) { | ||||
| 	qf := i.create(4) | ||||
| 
 | ||||
| 	qf.Union(0, 1) | ||||
| 
 | ||||
| 	if !qf.Connected(0, 1) { | ||||
| 		log.Fatalf("%v: sites should be connected after union", i.name) | ||||
| 	} | ||||
| 
 | ||||
| 	if qf.Find(0) != qf.Find(1) { | ||||
| 		log.Fatalf("%v after union sites should be in the same component", i.name) | ||||
| 	} | ||||
| 
 | ||||
| 	qf.Union(2, 3) | ||||
| 
 | ||||
| 	if !qf.Connected(2, 3) { | ||||
| 		log.Fatalf("%v: sites should be connected after union", i.name) | ||||
| 	} | ||||
| 
 | ||||
| 	if qf.Find(2) != qf.Find(3) { | ||||
| 		log.Fatalf("%v after union sites should be in the same component", i.name) | ||||
| 	} | ||||
| 
 | ||||
| 	qf.Union(1, 2) | ||||
| 
 | ||||
| 	if qf.Count() != 1 { | ||||
| 		log.Fatalf("%v after union count should be decreased", i.name) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										12
									
								
								fundamentals/exrecises/union_find/tinyUF.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								fundamentals/exrecises/union_find/tinyUF.txt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| 10 | ||||
| 4 3 | ||||
| 3 8 | ||||
| 6 5 | ||||
| 9 4 | ||||
| 2 1 | ||||
| 8 9 | ||||
| 5 0 | ||||
| 7 2 | ||||
| 6 1 | ||||
| 1 0 | ||||
| 6 7 | ||||
							
								
								
									
										8
									
								
								fundamentals/exrecises/union_find/union_find.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								fundamentals/exrecises/union_find/union_find.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| package unionfind | ||||
| 
 | ||||
| type UnionFind interface { | ||||
| 	Find(site int) int               // returns "component" to which "site" belongs | ||||
| 	Union(aSite, bSite int)          // links two sites. After union a and b belongs to same component | ||||
| 	Connected(aSite, bSite int) bool // checks if two sites belongs to same component | ||||
| 	Count() int                      // returns number of | ||||
| } | ||||
							
								
								
									
										62
									
								
								fundamentals/exrecises/union_find/union_find_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								fundamentals/exrecises/union_find/union_find_test.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,62 @@ | |||
| package unionfind | ||||
| 
 | ||||
| import ( | ||||
| 	"testing" | ||||
| ) | ||||
| 
 | ||||
| type implementation struct { | ||||
| 	name   string | ||||
| 	create func(int) UnionFind | ||||
| } | ||||
| 
 | ||||
| var implementations = []implementation{ | ||||
| 	{ | ||||
| 		name:   "quick find", | ||||
| 		create: NewQuickFind, | ||||
| 	}, | ||||
| 	{ | ||||
| 		name:   "quick union", | ||||
| 		create: NewQuickUnion, | ||||
| 	}, | ||||
| 	{ | ||||
| 		name:   "weighted quick union", | ||||
| 		create: NewWeightedQuickUnion, | ||||
| 	}, | ||||
| } | ||||
| 
 | ||||
| func TestCount(t *testing.T) { | ||||
| 	for _, implementation := range implementations { | ||||
| 		testCount(implementation) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestFind(t *testing.T) { | ||||
| 	for _, implementation := range implementations { | ||||
| 		testFind(implementation) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestUnion(t *testing.T) { | ||||
| 	for _, implementation := range implementations { | ||||
| 		testUnion(implementation) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkLarge(b *testing.B) { | ||||
| 	testFile("largeUF.txt", 6, implementation{ | ||||
| 		name:   "weighted quick union", | ||||
| 		create: NewWeightedQuickUnion, | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| func BenchmarkTiny(b *testing.B) { | ||||
| 	for _, implementation := range implementations { | ||||
| 		testFile("tinyUF.txt", 2, implementation) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkMedium(b *testing.B) { | ||||
| 	for _, implementation := range implementations { | ||||
| 		testFile("mediumUF.txt", 3, implementation) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										59
									
								
								fundamentals/exrecises/union_find/weighted_quick_union.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								fundamentals/exrecises/union_find/weighted_quick_union.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,59 @@ | |||
| package unionfind | ||||
| 
 | ||||
| type weightedQuickUnion struct { | ||||
| 	id    []int | ||||
| 	sizes []int | ||||
| 	count int | ||||
| } | ||||
| 
 | ||||
| func NewWeightedQuickUnion(count int) UnionFind { | ||||
| 	id := make([]int, count) | ||||
| 	sizes := make([]int, count) | ||||
| 
 | ||||
| 	for i := range id { | ||||
| 		id[i] = i | ||||
| 	} | ||||
| 
 | ||||
| 	for i := range sizes { | ||||
| 		sizes[i] = 1 | ||||
| 	} | ||||
| 
 | ||||
| 	return &weightedQuickUnion{id, sizes, count} | ||||
| } | ||||
| 
 | ||||
| func (qf *weightedQuickUnion) Find(site int) int { | ||||
| 	for site != qf.id[site] { | ||||
| 		site = qf.id[site] | ||||
| 	} | ||||
| 
 | ||||
| 	return site | ||||
| } | ||||
| 
 | ||||
| func (qf *weightedQuickUnion) Union(aSite, bSite int) { | ||||
| 	aComponent := qf.Find(aSite) | ||||
| 	bComponent := qf.Find(bSite) | ||||
| 
 | ||||
| 	if aComponent == bComponent { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	aSize := qf.sizes[aComponent] | ||||
| 	bSize := qf.sizes[bComponent] | ||||
| 
 | ||||
| 	if aSize > bSize { | ||||
| 		qf.id[bComponent] = aComponent | ||||
| 		qf.sizes[aComponent] += bSize | ||||
| 	} else { | ||||
| 		qf.id[aComponent] = bComponent | ||||
| 		qf.sizes[bComponent] += aSize | ||||
| 	} | ||||
| 	qf.count-- | ||||
| } | ||||
| 
 | ||||
| func (qf *weightedQuickUnion) Connected(aSite, bSite int) bool { | ||||
| 	return qf.Find(aSite) == qf.Find(bSite) | ||||
| } | ||||
| 
 | ||||
| func (qf *weightedQuickUnion) Count() int { | ||||
| 	return qf.count | ||||
| } | ||||
		Loading…
	
	Add table
		
		Reference in a new issue